赞
踩
将ViewModel对象赋值给DataContext
有两种绑定方式:
在视图的后端代码中添加绑定
this.DataContext = new MainWindowViewModel();
<Window.DataContext>
<local:MainWindowViewModel />
</Window.DataContext>
优点:在xaml中进行属性绑定属性时,ViewModel相关的属性都会在提示中显示
在ViewModel中定义一个完整属性,在Set加入OnPropertyChanged
的方法,然后在Xaml中将对应属性值改成{Binding xxx}
前台绑定格式:
<Control Property="{Binding xxxx}" />
示例代码:
ViewModel添加的代码:
说明:OnPropertyChanged();
只用在后台数据源更新了向前台UI界面推送用到,如果有的属性绑定,只需要前台界面向后台数据源更新,可以不添加。如果是双向绑定,也是需要。
private string _name; public string Name { get { return _name; } set { _name = value; OnPropertyChanged(); } } public string NewName { get; set; }
XAML代码:
<TextBox
Width="120"
Margin="90,58,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Text="{Binding NewName}"
TextWrapping="Wrap" />
<TextBlock
Margin="90,123,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
Text="{Binding Name}"
TextWrapping="Wrap" />
测试:
在vm中初始化属性
运行时绑定的控件显示正确值:
对于一些集合性质的控件,如ComboBox
、ListBox
、ListView
、DataGrid
、ItemsControl
等,需要绑定ItemsSource
属性,绑定对应VM的集合
<ItemsControl ItemsSource="{Binding MyCollection}" />
对于控件需要绑定集合数量不变,可以直接使用List<T>
集合
示例:ComboBox绑定固定的选项
<ComboBox
Width="120"
Margin="79,180,0,0"
HorizontalAlignment="Left"
VerticalAlignment="Top"
ItemsSource="{Binding Options}" />
ViewModel中添加集合属性Options,并初始化
public List<string> Options { get; set; }
//初始化
Options = new List<string>() { "选项1", "选项2", "选项3" };
效果:
对于集合需要发生变化的,需要使用ObservableCollection<T>
或者其他继承自INotifyCollectionChanged
接口的集合
示例:
在ListBox
上绑定
<ListBox
Margin="226,109,0,0"
d:ItemsSource="{d:SampleData ItemCount=5}"
ItemsSource="{Binding Messages}" />
d:ItemsSource="{d:SampleData ItemCount=5}"
为开发时的显示效果,对运行无影响,也不会产生数据
public ObservableCollection<string> Messages
{
get
{
return _messages;
}
set
{
_messages = value;
OnPropertyChanged();
}
}
//初始化
Messages = new ObservableCollection<string>() { "消息1", "消息2", "消息3", "消息4" };
效果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。