[英]How to change my code-behind binding to XAML binding
我是C#和WPF的新手。 我寫了一個簡單的程序。 我有一個稱為Counter
的類,它公開一個以0開始的只讀屬性Count
,以及一個僅將計數加1的公共方法Increment
。 Counter
實現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();
}
}
像這樣:
public CounterWindow(Counter ctr)
{
InitializeComponent();
DataContext = ctr;
}
標記:
<Label Content="{Binding Count}" />
UPD 。 MVVM中有兩種常見方法:視圖優先和模型優先。
視圖首先意味着您首先創建視圖,然后視圖創建綁定到的視圖模型。
“模型優先”意味着首先創建視圖模型,然后視圖模型創建其視圖,並將自身(通過構造函數或通過DataContext屬性設置器)傳遞為視圖的數據上下文。
希望這對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.