Привет! Я наслаждаюсь использованием легких в использовании фреймворков MVVM - они значительно облегчили мою жизнь и сняли ряд барьеров, которые было трудно преодолеть ....
Вопрос:
Я пытаюсь настроить пользовательское диалоговое окно для редактирования сообщений, которые пользователи отправляют друг другу. Я пытаюсь создать пользовательское диалоговое окно silverlight, используя объект ChildWindow, используя инфраструктуру MVVM.
Интересно, были ли какие-нибудь предложения относительно того, как это можно сделать
После примера диалога MVVM, который я нашел здесь: http://mvvmlight.codeplex.com/Thread/View.aspx?ThreadId=209338 Я застрял, потому что объект диалога ChildWindow в Silverlight является асинхронным и имеет другой класс Result.
Итак, основная идея, которую я имею сейчас, заключается в использовании модели представления класса (в данном случае Matrix.MessageViewModel) для создания экземпляра пользовательского диалогового окна, отправки его через Messenger.Send <>, обработки зарегистрированное сообщение в представлении для отображения диалогового окна, а затем обработчик кнопки «Сохранить» диалогового окна ChildWindow запускает Messenger.Send с измененным содержимым, которое затем сохраняется с помощью метода Save в viewmodel ...
Кажется немного округлым - поэтому хотел убедиться, что нет более чистого пути ...
Соответствующие биты кода:
смотреть модель:
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 в модель для хранения .....