如何将我的代码隐藏绑定更改为XAML绑定

时间:2012-05-23 17:37:09

标签: c# wpf data-binding

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

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

这一切都有效。

然而,我在网络和MSDN上看到的大多数示例主要涉及在XAML中定义绑定。如何在此处修改我的示例以将绑定操作移出代码并进入标记? VS2010的“属性”窗口中的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();
    }
}

1 个答案:

答案 0 :(得分:1)

这样的事情:

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

标记:

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

<强> UPD 即可。 MVVM中有两种常见的方法:视图优先和模型优先 视图首先表示您最初创建视图,然后查看创建视图模型,它被绑定到 模型优先意味着首先创建视图模型,然后视图模型创建其视图并将其自身(通过构造函数或通过DataContext属性setter)传递为视图的数据上下文。

希望这会对你有所帮助。