2012-05-23 180 views
0

我是C#和WPF的新手。我寫了一個簡單的程序。我有一個名爲Counter的類,它揭示了一個以0開始的只讀屬性Count,以及一個公共方法Increment,它只是將計數增加1。 Counter執行INotifyPropertyChanged如何更改我的代碼隱藏綁定到XAML綁定

我有一個Window類(代碼如下)。我將Counter對象的實例傳遞給構造函數並執行綁定。窗口有一個按鈕和一個標籤。該標籤綁定到計數器的Count屬性,並且按鈕調用Increment

這一切正常。

但是,我在網絡和MSDN上看到的大多數例子主要涉及在XAML中定義綁定。如何修改我的示例以將綁定操作移出代碼並放入標記中? VS2010屬性窗口中的綁定屬性似乎並不知道如何去做我想要的。也許這是不可能的?

還有一個問題:我不認爲這個例子適合MVVM ...我的櫃檯類是獨立的,除了通過它的屬性以外,沒有任何地方與視圖綁定。但是,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

事情是這樣的:

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

標記:

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

UPD。 MVVM中有兩種常見方法:先查看和先優先。
查看第一個意思是你最初創建的視圖,然後查看創建視圖模型,它是綁定到。模型優先意味着首先創建視圖模型,然後視圖模型創建其視圖並將其自身(通過構造函數或通過DataContext屬性設置器)作爲視圖的數據上下文傳遞。

希望這可以幫助你。

+0

作品。謝謝 :) – Steve