我是WPF的新手,在开发我的应用程序时出现了一个问题。 假设我有一个如下定义的文本框
<TextBox x:Name="MyTextBox" />
然后在我的C#代码中,我可以使用以下命令更改此文本框中显示的字符串
MyTextBox.Text = "Hello!";
但是,在XAML中我们有
时,还有另一种方法可以通过使用绑定来获得相同的行为<TextBox x:Name="MyTextBox" Text="{Binding Content}" />
在C#中我们有
public class MyText : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private string _content;
public string Content
{
get { return _content; }
set
{
_content = value;
PropertyChanged(this, new PropertyChangedEventArgs("Content"));
}
}
}
MyText txt = new MyText();
MyTextBox.DataContext = txt;
txt.Content = "Hello!";
显然第二个选项需要更多编码,但两者的结果是相同的。但是,在第二种情况下,我不必关心在UI线程上执行代码。因此,当我更改txt.Content
时,我的代码中的任何地方都会更改文本框中的字符串,而不会有任何异常。
我的问题是:对于更改属性的这两个选项中是否有任何设计问题首选项?
答案 0 :(得分:3)
第二个选项是使用MVVM模式的先决条件。 在第一个选项中没有去耦;每个操作都在视图中进行。 但是如果您更喜欢section选项并应用MVVM模式,那么您将拥有两个不同的类;一个用于实现UI - 即View,一个用于抽象View和Model。
您可以参考this web page了解更多详情。
答案 1 :(得分:1)
取决于您正在处理的项目类型。如果它是一个非常小的项目,我相信你可以通过代码使用直接分配。它的快速和肮脏的做事方式。但是嘿......如果它有效......它有效。 :)
如果你正在开展一个更大的项目,我相信你会发现使用绑定和MVVM模式有很多好处。如果您不了解MVVM事件,您会发现使用绑定会让您自动成长为模式。
但是嘿......我相信这是一个意见问题
答案 2 :(得分:1)
你几乎涵盖了每种方法的优点和缺点。使用绑定,可以在UI中自动更新代码中的文本,反之亦然。正如其他人所说,如果你想使用视图模型,那么第二个选项将更可取,但除非你需要严格遵守MVVM原则,否则你可以随时混合搭配。也就是说,它可以让你的代码让自己和别人感到困惑,所以最好选择一种风格并坚持下去。