数据绑定注意点
- 在给组件赋值的时候我们只能在UI线程中处理,同样也只能在UI线程中对
DataContext
已绑定的对象进行操作。 - 文本组件可以绑定int和double类型,不用必须为string类型。
另外提一下
我们在做JSON转换的时候,数字类型的值可能为空的时候,直接转对象必须属性为可空类型。
有时候为了方便处理,我们可以把属性定义为string,这样也是能成功转换的。
数据绑定
定义基类
1 | using System.ComponentModel; |
定义数据源的类
1 | public class ToolbarModel : ZNotifyModel |
上面例子中我们可以看到,
如果我们要在数据改变时通知页面改变的属性都要在Set
方法中调用OnPropertyChanged
而列表不再用List,而是使用ObservableCollection
ObservableCollection
注意ObservableCollection中调用Add方法会触发列表刷新,但是如果直接更换了对象就不会刷新了。
方式1
如下示例
1 | int pageSize = 15; |
其中pageList
必须调用OnPropertyChanged
方法才会刷新
1 | public class JianDaDetailPageData : ZNotifyModel |
方式2
如果pageList
保持原样那么赋值只能使用Add
方法
1 | this._pageData.pageList.Clear(); |
对应
1 | public class JianDaDetailPageData : ZNotifyModel |
设置数据源
代码中也要进行数据源的设置
1 | pageData.IsRight = true; |
上面设置整个页面的数据,当然也可以设置某个组件的数据源
1 | this.toolbar_list.DataContext = mydata; |
页面中绑定值
1 | <Window.Resources> |
双向绑定
1 | <TextBox Grid.Row="0" Text="{Binding Title,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"/> |
关键属性 UpdateSourceTrigger=PropertyChanged,Mode=TwoWay
通用值转换
经常我们在绑定数据的时候需要的数据类型和原数据不同,这时候我们就需要对数据进行转换
工具类
C#
1 | namespace Z.Converters |
使用
1 |
|
颜色
1 | Background="{Binding Path=KYFile, Converter={StaticResource ZGenericTypeConverter}, ConverterParameter='0:#666666|1:#019266|2:#FF001E'}" |
前景色
1 | Foreground="{Binding Path=KYFile, Converter={StaticResource ZGenericTypeConverter}, ConverterParameter='0:#666666|1:#019266|2:#FF001E'}" |
边框
1 | <Border |
文字
1 | Text="{Binding Path=KYFile, Converter={StaticResource ZGenericTypeConverter}, ConverterParameter='0:未检测|1:正常|2:异常'}" |
绑定是否显示
1 | Visibility="{Binding Path=selectIndex, Converter={StaticResource ZGenericTypeConverter}, ConverterParameter='1:Visible|other:Hidden'}" |
不同状态切换
1 | <Image |
自定义代码片段
上面属性写的时候比较麻烦,建议使用自定义代码片段。
在任意地方创建一个文件夹,最好是你不去经常移动的地方,文件夹是用来存放你自定义的代码块的文件夹,
我就创建了一个名称:csharp_snippet
的文件夹
新建代码块文件zprop.snippet
1 |
|
保存啦,然后依然是去 工具–>代码段管理器 –>选择Visual C#语言 –>选择下方的添加 –>浏览到你自定义的那个放代码块的文件夹就OK啦。
重启开发工具。
此时要我在项目中打出zprop
按两次Tab 那我的数据访问层的代码就全部出来啦,当然还要添加一些引用就可以啦