Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF中,属性应通过其名称或使用绑定进行更改_C#_Wpf_Windows Phone - Fatal编程技术网

C# 在WPF中,属性应通过其名称或使用绑定进行更改

C# 在WPF中,属性应通过其名称或使用绑定进行更改,c#,wpf,windows-phone,C#,Wpf,Windows Phone,我是WPF的新手,在开发我的应用程序时,我的脑海中出现了一个问题。 假设我有一个如下定义的文本框 <TextBox x:Name="MyTextBox" /> 然而,当我们在XAML中使用绑定时,还有另一种方法可以实现相同的行为 <TextBox x:Name="MyTextBox" Text="{Binding Content}" /> 显然,第二个选项需要更多的编码,但两者的结果是相同的。然而,在第二种情况下,我不必关心在UI线程上执行代码。因此,当我更改txt.

我是WPF的新手,在开发我的应用程序时,我的脑海中出现了一个问题。 假设我有一个如下定义的文本框

<TextBox x:Name="MyTextBox" />
然而,当我们在XAML中使用绑定时,还有另一种方法可以实现相同的行为

<TextBox x:Name="MyTextBox" Text="{Binding Content}" />
显然,第二个选项需要更多的编码,但两者的结果是相同的。然而,在第二种情况下,我不必关心在UI线程上执行代码。因此,当我更改
txt.Content
时,文本框中的字符串将毫无例外地更改


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

第二个选项是采用MVVM模式的先决条件。 在第一种选择中,没有解耦;每个操作都发生在视图中。 但是如果您更喜欢section选项并应用MVVM模式,那么您将有两个不同的类;一个用于只实现UI,即视图,另一个用于抽象视图和模型


有关更多详细信息,请参阅。

取决于您所从事的项目类型。如果这是一个非常小的项目,我相信你可以通过代码直接分配。这是一种快速而肮脏的做事方式。但是嘿。。。如果行得通。。它有效。:)

如果您正在处理一个更大的项目,我相信您会发现使用绑定和MVVM模式有很多优点。事件如果您不知道MVVM,您将看到使用绑定将使您自动进入该模式


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

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

实际上,我并没有读太多关于MVVM模型的书,对于WPF,我只是开始编写代码,没有读任何关于它的书!当我开始这个项目时,它的代码很小。但现在它正在增长,当我尝试创建一个单独的管理器类和一个页面类时,我发现每当我调用页面类中的方法来更改UI中的某些内容时,我都必须在
Dispatcher.BeginInvoke()
块中运行代码,这很烦人。所以,我突然想到,绑定的使用可能对我有帮助,即使对于这个代码不到1400行的项目也是如此。请一定尝试一下绑定。如果您按逻辑行事,它将引导您自动使用MVVM(或至少部分使用MVVM)。牢记对每个显示属性的视图(或页面)使用一个ViewModel类,然后将ViewModel注入页面。但有一点可以肯定,您的Manager类不应该直接与页面对话。
<TextBox x:Name="MyTextBox" Text="{Binding Content}" />
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!";