Я использую MVVM с библиотеками Galasoft MVVMLight.Сделать обновление свойства в одном классе триггером setter для свойства этого типа в другом классе
У меня есть две модели; каждый имеет логическое свойство и различные свойства одного и того же типа.
public class Model1 : ObservableObject
{
public EnumPair<YesNoInherit> Model1Property
{
get { return _model1Property; }
set
{
_model1Property = value;
Updated = true
RaisePropertyChanged("Model1Property");
}
}
public bool Updated
{
get { return _updated; }
set
{
_updated = value;
RaisePropertyChanged("Updated");
}
}
}
public class Model2 : ObservableObject
{
public EnumPair<YesNoInherit> Model2Property
{
get { return _model2Property; }
set
{
_model2Property = value;
Updated = true
RaisePropertyChanged("Model2Property");
}
}
public bool Updated
{
get { return _updated; }
set
{
_updated = value;
RaisePropertyChanged("Updated");
}
}
}
Тип YesNoInherit - это перечисление, имеющее значения No, Yes и Inherit.
Это класс EnumPair.
public class EnumPair<T> : ObservableObject where T : struct, IConvertible
{
public T EnumValue
{
get { return _enumValue; }
set
{
if (Type.Equals(value, _enumValue) == false)
{
_enumValue = value;
RaisePropertyChanged();
}
}
}
public string SourceName
{
get { return _sourceName; }
set
{
_sourceName = value;
RaisePropertyChanged();
}
}
}
На мой взгляд, я пытаюсь использовать ComboBox, чтобы позволить пользователю выбрать один из трех значений перечислений, а также, в некоторых случаях, отображать пользовательский текст. Ресурс «enumComboBoxTemplate» позволяет выпадающему списку ComboBox отображать описания перечислений. Конвертер «inheritanceEnum2Desc» - это место, где будет применен пользовательский текст. «object1» - это экземпляр «Model1».
<ComboBox ItemTemplate=ItemTemplate="{StaticResource enumComboBoxTemplate}"
EnumSource="enums:YesNoInherit">
<ComboBox.Text>
<MultiBinding Converter="{StaticResource inheritanceEnum2Desc}">
<Binding Path="object1.EnumValue"/>
<Binding Path="object1.SourceName"/>
</MultiBinding>
</ComboBox.Text>
</ComboBox>
«Model2» будет использоваться в будущих программах, использующих аналогичные функции, но с разными данными.
Когда я изменяю выделение в ComboBox, я хочу изменить значение «Обновлено» (от false до true), поэтому я могу включить кнопку в представлении. По-видимому, это требует, чтобы класс EnumPair каким-то образом заставлял программу выполнять setter для Model1Property. Поскольку у двух классов модели есть свойства типа EnumPair, я не верю, что могу добавить какой-либо код в EnumPair, специфичный для любого класса модели.
Как это сделать? Я был бы очень признателен за любую помощь.
«Модель 2» будет использоваться в будущем программировании с использованием аналогичных функций, но с разными данными ». Похоже, вам не следует создавать два отдельных класса, а вместо этого создавать два отдельных экземпляра. Однако я действительно не понимаю. Это похоже на то, что вам нужен ViewModelLocator для доступа к вашим статическим ViewModels. Опишите вашу проблему дальше. – chris579