2016-04-20 4 views
0

Я пытался обновить параметры от DetailViewModel до MainViewModel с помощью протокола сообщений в mvvmcross. Следующий код работает, если вы хотите обновлять свойства на лету; однако я смущен, потому что у меня есть кнопка save, которая позволяет пользователю подтвердить свои изменения в DetailViewModel, прежде чем вернуться к MainViewModel.Кнопка сохранения в протоколе сообщений в MVVMCross

Как я должен обрабатывать этот сценарий? Есть ли способ справиться?

MainViewModel

private readonly IMvxMessenger _messenger; 
private readonly MvxSubscriptionToken _token; 

public MainViewModel(IMvxMessenger messenger) { 

    _messenger = messenger; 
    _token = messenger.Subscribe<SelectedItemMessage>(OnMessageReceived);; 
} 

private void OnMessageReceived(SelectedItemMessage obj) 
{ 
    Age = obj.Age; 
    Category= obj.Category; 
} 

DetailViewModel

private readonly IMvxMessenger _messenger; 

public DetailViewModel(IMvxMessenger messenger) { 
    _messenger = messenger; 
} 

public void UpdateMethod() { 
    var message = new SelectedItemMessage(this, SelectedItem); 
    _messenger.Publish(message, typeof(SelectedItemMessage)); 
} 

SelectedItemMessage

public SelectedItemMessage(object sender, double age, int category) : base(sender) 
    { 
     Age = age; 
     Category = category; 
    } 

    public double Age { get; set; } 
    public int Category{ get; set; } 
} 
+0

Какой код позади метод 'Сохранить'? – Pilatus

+0

@hotspring - Какая у вас проблема? – Giorgi

ответ

2

Если данные должен обновляться только тогда, когда пользователь выполняет действие Save, вызовите UpdateMethod, когда ваш пользователь нажмет его.

public void Save() { 

    UpdateMethod(); 
} 
+0

Большое спасибо Pilatus. когда я пытаюсь изменить «возраст», я получаю 'formatnumber exception'. Другими словами, когда я очищаю значение/число из 'textview' до ввода нового значения. – hotspring

+0

http://stackoverflow.com/questions/36753822/numberformat-exception-in-mvvmcross – hotspring

2

Вы можете использовать ACR MvvmCross User Dialogs библиотеку, чтобы показать диалоговое окно подтверждения и вызвать UpdateMethod только если пользователь подтвердил действие:

var result = await UserDialogs.Instance.ConfirmAsync("Pick a choice", "Pick Title"); 
if (result) 
{ 
    UpdateMethod(); 
} 

Убедитесь, что вы Setup the library правильно, прежде чем использовать его

+0

http://stackoverflow.com/questions/36753822/numberformat-exception-in-mvvmcross – hotspring

Смежные вопросы