【问题标题】:How to change my code-behind binding to XAML binding如何将我的代码隐藏绑定更改为 XAML 绑定
【发布时间】:2012-05-23 17:37:09
【问题描述】:

我是 C# 和 WPF 的新手。我写了一个简单的程序。我有一个名为Counter 的类,它公开了一个从0 开始的只读属性Count,以及一个简单地将计数加一的公共方法IncrementCounter 实现 INotifyPropertyChanged

我有一个 Window 类(代码如下)。我将Counter 对象的实例传递给构造函数并执行绑定。该窗口有一个按钮和一个标签。标签绑定到计数器的Count属性,按钮调用Increment

这一切都有效。

但是,我在网络和 MSDN 上看到的大多数示例主要处理在 XAML 中定义绑定。如何在此处修改我的示例以将绑定操作从代码后面移到标记中? VS2010的Properties窗口中的Binding属性好像不知道怎么做我想做的。也许不可能?

另外一个问题:我认为这个示例不适合 MVVM...我的 Counter 类是独立的,除了通过其属性之外,它不与任何地方的视图相关联。但是,CounterWindow 类持有对它的引用。这是此参考的正确位置吗?我也认为也许我应该创建窗口,然后设置我将使用的属性(例如CounterObject),而不是通过构造函数传递。

public partial class CounterWindow : Window {
    Counter ctr;

    public CounterWindow(Counter ctr) {
        InitializeComponent();

        this.ctr = ctr;
        Binding b = new Binding("Count");
        b.Source = ctr;
        CounterLabel.SetBinding(Label.ContentProperty, b);
    }

    private void IncrementButton_Click(object sender, RoutedEventArgs e) {
        ctr.Increment();
    }
}

【问题讨论】:

    标签: c# wpf data-binding


    【解决方案1】:

    类似这样的:

    public CounterWindow(Counter ctr) 
    {
        InitializeComponent();
        DataContext = ctr;
    }
    

    标记:

    <Label Content="{Binding Count}" />  
    

    UPD。 MVVM 中有两种常见的方法:视图优先和模型优先。
    View first 意味着您最初创建了视图,然后视图创建​​了它所绑定的视图模型。
    模型优先意味着首先创建视图模型,然后视图模型创建其视图并将其自身(通过构造函数或通过 DataContext 属性设置器)作为视图的数据上下文传递。

    希望对你有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-15
      • 1970-01-01
      • 2015-03-25
      • 1970-01-01
      • 2016-07-09
      • 2019-06-07
      • 2010-11-12
      • 1970-01-01
      相关资源
      最近更新 更多