這是它組合在一起簡而言之方式。
首先,您定義一個模型來保存綁定的數據。
public sealed class MyListBoxItem
{
public string Field1 {get;set;}
public string Field2 {get;set;}
public string Field3 {get;set;}
}
現在,你必須有一個持有這些模型進行綁定的類。這種類型通常稱爲ViewModel;它根據來自View的用戶輸入向View提供信息以進行綁定。它的公共屬性通常ObservableCollections和DependencyProperties這樣在視圖模型的變化將通過視圖(UI)被自動拾取:
public sealed class MyViewModel
{
public ObservableCollection<MylistBoxItem> Items {get;private set;}
public MyViewModel()
{
Items = new ObservableCollection<MyListBoxItem>();
Items.Add(new MyListBoxItem{Field1="One", Field2="Two",Filed3="Three"};
}
}
在代碼隱藏你的UI,「查看」,您實例化你的ViewModel並將其設置爲View的DataContext。
public MyView()
{
this.DataContext = new MyViewModel();
}
這是非常重要的,因爲DataContext通過可視化樹「流動」。它可用於設置它的每個子元素。
要顯示的項目,我必須綁定ListView中到DataContext的物品屬性的的ItemsSource(這被理解)。 ListView中的每一行都將其DataContext設置爲Items屬性中的每個單獨的MyViewModel。所以你必須將每個顯示成員綁定到MyListBoxItem的屬性。
<ListView Name="RecordListView" ItemsSource="{Binding Items}">
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn Header="1" Width="Auto" DisplayMemberBinding="{Binding Path=Field1}" />
<GridViewColumn Header="2" Width="50" DisplayMemberBinding="{Binding Path=Field2}" />
<GridViewColumn Header="3" Width="100" DisplayMemberBinding="{Binding Path=Field3}" />
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
要了解這整個過程中更好,尋找高評級的問題在這裏標記[MVVM]。
此外,爲幫助調試您的綁定,對於詳細的數據綁定配置調試:
+1非常具有描述性......當然有幫助。但我仍然建議打下基礎,熟悉數據綁定和數據模型,然後去MVVM – biju 2011-03-07 14:15:36
感謝這樣一個全面的答案,我創建了ViewModel並得到了這個工作。有沒有辦法刷新事件的ViewModel/Items列表,因爲此代碼連接到數據庫,所以實時更新,我需要在屏幕上反映這些更改 – MattP 2011-03-07 14:49:39
@Matt聽起來像你想創建一個[ DispatcherTimer](http://msdn.microsoft.com/zh-cn/library/system.windows.threading.dispatchertimer.aspx)。您可以響應其Tick事件並更新ViewModel的公共屬性作爲響應。您的屬性必須通過成爲DependencyProperties,ObservableCollections或實現INotifyPropertyChanged的VM來傳播更新通知。您還必須瞭解從後臺線程更新UI的問題(Tick事件不會在UI線程上觸發)。所有這些主題都可以在這裏搜索。 – Will 2011-03-07 15:28:33