我有一个绑定到ViewModel的视图
DataContext="{Binding MyViewModel, Source={StaticResource Locator}}">
文本框,...绑定到ViewModel中的属性:
<TextBox Text="{Binding MyValue, Mode=TwoWay}"/>
<TextBlock Text="{Binding DisplayValue}"/>
ViewModel中的属性:
public MyViewModel()
{
DisplayValue = "0€";
MyValue = "0";
}
private string _myvalue;
public string MyValue
{
get
{
return _myvalue;
}
set
{
_myvalue = value;
ChangeValue();
RaisePropertyChanged(() => MyValue);
}
}
private string _displayvalue;
public string DisplayValue
{
get
{
return _displayvalue;
}
set
{
_displayvalue = value;
RaisePropertyChanged(() => DisplayValue);
}
}
private void ChangeValue()
{
//do something here and change the values of the property, e.g.:
DisplayValue = MyValue + "€";
}
这只是一个剪辑。我通常在THE VIEWMODEL中有~50个属性,所有方法也在ViewModel中(意味着RelayCommands AND方法,它们将在约50%属性的setter中调用)。 如您所见,我没有使用任何模型。这是使用MVVM的正常方式还是我应该创建一个新类并将所有属性/方法放在新类(Model)中?...但是我应该如何将视图中的元素与属性中的元素绑定在一起?模型,当视图DataContext绑定到ViewModel?
时编辑:说清楚。 我有一个TextBox,TextBox绑定到ViewModel中的属性。这是使用MVVM的正确方法吗?我应该只在我有一个List(例如ComboBox)时使用Model-Class,或者当我有几个TextBox时(我的眼中有点愚蠢和不必要),我应该使用Model-Class吗?
答案 0 :(得分:1)
我希望我明白你要做什么。我的解决方案包含我在MVVM模式中使用的DependencyProperty,而不是INotifyPropertyChanged。
可以说,你有一个包含属性的模型:
public class SymbolStatsModel
{
public string Symbol
{
get
{
return this._symbol;
}
set
{
this._symbol = value;
}
}
}
然后相应的ViewModel将是这样的。声明属性和依赖属性:
public string Symbol
{
get
{
return (string)GetValue(SymbolProperty);
}
set
{
SetValue(SymbolProperty, value);
}
}
public static readonly DependencyProperty SymbolProperty =
DependencyProperty.Register
(
"Symbol",
typeof(string),
typeof(SymbolStatsViewModel),
new FrameworkPropertyMetadata
(
string.Empty
)
);
并在ViewModel中创建Model类(SymStatsModel)的属性:
public SymbolStatsModel SymbolStatsModel
{
get
{
return new SymbolStatsModel(Symbol);
}
set
{
this.Symbol = value.Symbol;
}
}
这样,您分配给ViewModel符号属性的值将分配给模型属性。此外,您可以通过访问ViewModel中存在的模型的属性,从View直接访问Model的属性。
这可能有点难以理解,但这确实是使视图与模型通信的方法。另一方面,您可以使用INotifyPropertyChanged指定模型的属性,就像我在解决方案中提到的那样。我想有点不成熟,但是你给了它一个想法。
答案 1 :(得分:0)
&#34;分而治之&#34;应该帮助你保持可维护性
MyVm.SubVm.Property