Я ищу решение для пожара PropertyChanged из всего свойства, если изменяется одно из внутренних свойств. поэтому вот модель:RaisePropertyChanged из всего объекта, если изменилось внутреннее свойство
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).
в виртуальной машине используется так:
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 имеет нулевое значение, это связанно с креплений не решены. Так же, как тест, подпишитесь на свой «ViewModel» на «Свойство PropertyChanged» Model и посмотрите, сможете ли вы получить изменения. – XAMlMAX
Ваш «Messenger.Default.Send» вызывается только в том случае, если вы присваиваете экземпляр класса «MainStatus» _new_ для вашего свойства «MainStatus» vm. Он не будет вызываться, если вы просто измените любой из внутренних свойств MainStatus. – nabulke