在WPF中,应该通过名称或绑定来更改属性

时间:2013-07-25 12:53:56

标签: c# wpf windows-phone

我是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时,我的代码中的任何地方都会更改文本框中的字符串,而不会有任何异常。

我的问题是:对于更改属性的这两个选项中是否有任何设计问题首选项?

3 个答案:

答案 0 :(得分:3)

第二个选项是使用MVVM模式的先决条件。 在第一个选项中没有去耦;每个操作都在视图中进行。 但是如果您更喜欢section选项并应用MVVM模式,那么您将拥有两个不同的类;一个用于实现UI - 即View,一个用于抽象View和Model。

您可以参考this web page了解更多详情。

答案 1 :(得分:1)

取决于您正在处理的项目类型。如果它是一个非常小的项目,我相信你可以通过代码使用直接分配。它的快速和肮脏的做事方式。但是嘿......如果它有效......它有效。 :)

如果你正在开展一个更大的项目,我相信你会发现使用绑定和MVVM模式有很多好处。如果您不了解MVVM事件,您会发现使用绑定会让您自动成长为模式。

但是嘿......我相信这是一个意见问题

答案 2 :(得分:1)

你几乎涵盖了每种方法的优点和缺点。使用绑定,可以在UI中自动更新代码中的文本,反之亦然。正如其他人所说,如果你想使用视图模型,那么第二个选项将更可取,但除非你需要严格遵守MVVM原则,否则你可以随时混合搭配。也就是说,它可以让你的代码让自己和别人感到困惑,所以最好选择一种风格并坚持下去。