这是它组合在一起简而言之方式。
首先,您定义一个模型来保存绑定的数据。
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