Привет! Я наслаждаюсь использованием MVVM light -great framework - сделал мою жизнь намного проще и устранил ряд препятствий, которые трудно преодолеть....
Вопрос:
Я пытаюсь настроить настраиваемое диалоговое окно для редактирования сообщений, отправляемых пользователями друг другу. Я пытаюсь построить специальное диалоговое окно Silverlight, используя объект ChildWindow с использованием среды MVVM.
Интересно, были ли какие-либо предложения относительно того, как это может быть выполнено?
Следуя образцу кода MVVM диалогового окна, я нашел здесь: http://mvvmlight.codeplex.com/Thread/View.aspx?ThreadId=209338 Я застрял, потому что диалоговое окно ChildWindow в Silverlight является асинхронным, и имеет другой класс результатов.
Итак. Основная идея, которую я сейчас имею, - использовать модель представления класса (в данном случае Matrix.MessageViewModel) для создания экземпляра настраиваемого диалогового окна, отправить его через Messenger.Send < > , обработать зарегистрированное сообщение в представлении для отображения диалогового окна, а затем диалоговое окно ChildWindow. Сохраните кнопку "Сохранить". Пропустите Messenger.Send с измененным содержимым, которое затем сохраняется с помощью метода "Сохранить" в режиме просмотра...
Кажется немного кругом - так хотелось убедиться, что не было более чистого пути....
Соответствующие биты кода:
модель просмотра:
messageDialogBox = new MessageEditorDialog(
selectedMessage, this.SelectedSiteId, this.LoggedOnEmployee.Id, this.Projects);
DialogMessage editMessage = new DialogMessage(
this, messageDialogBox,"Edit Message", DialogMessageCallback);
Messenger.Default.Send(editMessage);
Вид:
public ViewHost()
{
InitializeComponent();
Loaded += new RoutedEventHandler(ViewHost_Loaded);
if (!ViewModelBase.IsInDesignModeStatic)
{
// Use MEF To load the View Model
CompositionInitializer.SatisfyImports(this);
}
ApplicationMessages.IsBusyMessage.Register(this, OnIsBusyChange);
Messenger.Default.Register<DialogMessage>(this, msg => ShowDialog(msg));
}
private void ShowDialog(DialogMessage msg)
{
MessageEditorDialog myDialog = (MessageEditorDialog) msg.Target;
myDialog.Show();
}
Диалог Сохранить:
private void ButtonSave_Click(object sender, RoutedEventArgs e)
{
Messenger.Default.Send<Message>(
this.MessageItem, CommandMessages.MessageTypes.MessageSave);
}
Это связано с ViewModel, который имеет Messenger.Default.Register < > наблюдение за CommandTypes.MessageSave, который направляет результирующий MessageItem к модели для хранения.....