Поздравления! Люблю использовать световой сигнал MVVM - большая платформа - сделала мою жизнь намного легче, и сняла много барьеров, которые оказывались трудными преодолеть....
Вопрос:
Я пытаюсь установить пользовательское диалоговое окно для редактирования пользователей сообщений, отправляют друг другу. Я пытаюсь создать Silverlight пользовательское диалоговое окно с помощью объекта ChildWindow использование платформы MVVM.
Задавался вопросом, были ли какие-либо предложения относительно того, как это могло бы быть выполнено
После диалогового примера кода MVVM я нашел здесь: http://mvvmlight.codeplex.com/Thread/View.aspx?ThreadId=209338 я застрял, потому что диалоговый объект ChildWindow в Silverlight асинхронен, и имеет другой класс Результата.
Таким образом - Общее представление, которое я имею теперь, использует модель представления класса (в этом случае Матрица. MessageViewModel) для создания экземпляра пользовательского диалогового окна отправьте его через Messenger. Отправьте <>, обработайте зарегистрированное сообщение в представлении для отображения диалогового окна, затем имейте огонь обработчика кнопок Save диалогового окна ChildWindow Messenger. Отправьте с измененным содержанием, который затем хранится с помощью метода Сохранения на 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(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(
this.MessageItem, CommandMessages.MessageTypes.MessageSave);
}
Это скрепляет в ViewModel, который имеет Messenger. Значение по умолчанию. Регистр <> наблюдающий за CommandTypes. MessageSave, который направляет получающийся MessageItem к модели для устройства хранения данных.....
Это чертовски близко к тому, что я бы сделал, за исключением пары вещей, которые я делаю иначе.
Вот изменения, которые я бы внес в вашу модель представления, следуя предложениям 2 и 3.
public class MessageEditorDialogViewModel : ViewModelBase
{
private DialogMessage _dialogMessage;
public RelayCommand SaveCommand { get; private set; }
public DialogMessage Message { get; set; }
public MessageEditorDialogViewModel()
{
SaveCommand = new RelayCommand(SaveCommandExecute);
}
private SaveCommandExecute()
{
Message.Execute();
}
}