я ищу решение для запуска PropertyChanged всего свойства, если одно из внутренних свойств изменяется. так вот модель:
public class MainStatus : ObservableObject
{
private bool _safety;
public bool Safety
{
get { return _safety; }
set
{
if (_safety == value)
return;
_safety = value;
RaisePropertyChanged("Safety");
}
}
private bool _setupMode
public bool SetupMode
{
get { return _setupMode; }
set
{
if (_setupMode == value)
return;
_setupMode = value;
RaisePropertyChanged("SetupMode");
}
}
}
у него есть еще несколько свойств (bool, int и string).
в vm это используется так:
private MainStatus _mainStatus;
public MainStatus MainStatus
{
get { return _mainStatus; }
set
{
if (_mainStatus == value)
return;
_mainStatus = value;
RaisePropertyChanged("MainStatus");
}
}
я могу привязываться к внутренним свойствам следующим образом:
<DataTrigger Binding="{Binding MainStatus.Safety}" Value="true">
это все работает нормально. но мне нужно отправить весь MainStatus на другие виртуальные машины, если одно из внутренних свойств изменится. поэтому я изменил свойство следующим образом:
public MainStatus MainStatus
{
get { return _mainStatus; }
set
{
if (_mainStatus == value)
return;
_mainStatus = value;
RaisePropertyChanged("MainStatus");
Messenger.Default.Send<MainStatusMessage>(new MainStatusMessage() { MainStatus = _mainStatus });
}
}
но это не работает. похоже, что PropertyChanged для MainStatus
никогда не срабатывает, если изменяется одно из внутренних свойств. как я могу это исправить?
PropertyChanged
EventHandler имеет значение null, это связано с тем, что привязки не разрешены. Просто в качестве теста подпишите свойViewModel
на событиеModel
s PropertyChanged и посмотрите, сможете ли вы после этого принять изменения. - person XAMlMAX   schedule 26.09.2014Messenger.Default.Send
будет вызываться только в том случае, если вы назначите новый экземпляр классаMainStatus
своему свойствуMainStatus
виртуальной машины. Он не будет вызываться, если вы просто измените любое из внутренних свойств MainStatus. - person nabulke   schedule 26.09.2014