数据绑定
定义基类
代码语言:javascript复制using System.ComponentModel;
namespace ZJClassTool.Utils
{
public class MyNotifyModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
}
定义数据源的类
代码语言:javascript复制public class ToolbarModel : MyNotifyModel
{
public ObservableCollection<ToolbarMenu> menuList { get; set; }
bool _IsRight = true;
public bool IsRight
{
get { return _IsRight; }
set { _IsRight = value; OnPropertyChanged("IsRight"); }
}
public ToolbarModel()
{
menuList = new ObservableCollection<ToolbarMenu>();
}
}
public class ToolbarMenu : MyNotifyModel
{
string _name;
public string Name
{
get { return _name; }
set { _name = value; OnPropertyChanged("Name"); }
}
public string Pic { get; set; }
}
上面例子中我们可以看到,
如果我们要在数据改变时通知页面改变的属性都要在Set
方法中调用OnPropertyChanged
而列表不再用List,而是使用ObservableCollection
代码中也要进行数据源的设置
代码语言:javascript复制pageData.IsRight = true;
pageData.menuList.Add(new ToolbarMenu()
{
Name = "开始直播",
Pic = "Images/ToolBar/toobar_12_1.png"
});
DataContext = pageData;
上面设置整个页面的数据,当然也可以设置某个组件的数据源
代码语言:javascript复制this.toolbar_list.DataContext = mydata;
页面中绑定值
代码语言:javascript复制<Window.Resources>
<DataTemplate x:Key="ToolbarMenu">
<Button x:Name="toolbar_item" Background="Transparent" BorderThickness="0" Cursor="Hand" Height="60" Click="toolbar_item_Click">
<Button.Content>
<StackPanel Width="Auto" Background="Transparent">
<Image HorizontalAlignment="Center" Width="44" Source="{Binding Pic}"/>
<TextBlock HorizontalAlignment="Center" Text="{Binding Name}" Foreground="#3C525B"/>
</StackPanel>
</Button.Content>
</Button>
</DataTemplate>
</Window.Resources>
<ItemsControl
x:Name="toolbar_list"
ItemsSource="{Binding menuList}"
ItemTemplate="{StaticResource ToolbarMenu}"
ScrollViewer.VerticalScrollBarVisibility="Disabled"
ScrollViewer.HorizontalScrollBarVisibility="Disabled"
Grid.Row="1" Background="#f3f3f3" BorderThickness="0">
</ItemsControl>
双向绑定
代码语言:javascript复制<TextBox Grid.Row="0" Text="{Binding Title,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"/>
<TextBlock Grid.Row="0" Text="{Binding Path=Title}"/>
关键属性 UpdateSourceTrigger=PropertyChanged,Mode=TwoWay