【发布时间】:2013-05-27 14:04:51
【问题描述】:
我有一个绑定到 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 + "€";
}
这只是一个片段。我通常在 VIEWMODEL 中有大约 50 个属性,所有方法也在 ViewModel 中(意味着 RelayCommands 和方法,将在大约 50% 的属性的设置器中调用)。 如您所见,我没有使用任何模型。这是使用 MVVM 的正常方式还是应该创建一个新类并将所有属性/方法放在新类(模型)中?...但是我应该如何将视图中的元素与属性中的属性绑定Model,viewsDataContext什么时候绑定到ViewModel?
编辑:说清楚。 我有一个 TextBox,TextBox 绑定到 ViewModel 中的一个属性。这是使用 MVVM 的正确方法吗?我应该只在我有一个列表(例如 ComboBox)时使用 Model-Class,还是在我有多个 TextBox(在我看来这有点愚蠢和不必要)时才使用?
【问题讨论】:
-
好吧,这可能是一个愚蠢的评论,但你测试过这段代码吗?据我所知,当您设置 MyValue 时,您会引发 PropertyChanged 事件,然后调用 ChangeValue() 方法,该方法将设置 MyValue 属性,该属性将引发 PropertyChanged 事件,该事件将调用 ChangeValue() 方法,该方法将设置MyValue 属性...等等。除非 MyValue += "€" 不使用 Setter,但我对此表示严重怀疑。似乎就像一个很好的旧无限循环/内存泄漏。但同样,我没有自己测试过,所以我可能是错的;)
-
是的,你是对的......愚蠢的例子,要改变(编辑)它