0

我是 C# 和 WPF 的新手。我写了一个简单的程序。我有一个名为 的类Counter,它公开了一个从 0 开始的只读属性Count,以及一个Increment简单地将计数加一的公共方法。Counter实现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();
    }
}
4

1 回答 1

1

像这样的东西:

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

标记:

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

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

希望这对您有所帮助。

于 2012-05-23T17:44:17.220 回答