问题背景 某一天,我想做一个签到打卡的日历.基于 Calendar,想实现这个目标,于是找到了它的 SelectedDates 属性,用于标记签到过的日期. 问题来了. 基于MVVM模式,想将其在xaml中绑定到ViewModel中的一个ObservableCollection属性.但 SelectedDates 是只读的 CLR 属性. 解决思路: 给它搭个桥:创建一个相同Type的附加属性,用附加属性绑定到ViewModel中的ObservableCollection属性.并在附加属性的变更…
在 Binding 中使用 ElementName 司空见惯,没见它出过什么事儿.不过当你预见 ContextMenu,或者类似 Grid.Row / Grid.Column 这样的属性中设置的时候,ElementName 就不那么管用了. 本文将解决这个问题. 本文内容 以下代码是可以正常工作的 以下代码就无法正常工作了 使用 x:Reference 代替 ElementName 能够解决 参考资料 以下代码是可以正常工作的 <Window x:Class="Walterlv.Demo.…
在练习WPF绑定时发现对象属性可以在XAML中绑定,但字段是不可以绑定: 比如: private Person person{get;set;}  可以绑定到XAML中,<TextBox Name="txt" DataContent="person"... 但private Person person; 是不可以按上面方法绑定,如非要绑定,可以在后台代码中绑定:txt.DataContent=person; 这样是可以的.…
原文:整理:WPF中Xaml中绑定枚举的写法 目的:在Combobox.ListBox中直接绑定枚举对象的方式,比如:直接绑定字体类型.所有颜色等枚举类型非常方便 一.首先用ObjectDataProvider定义资源 <UserControl.Resources> <ObjectDataProvider x:Key="LeftRightAlignment" MethodName="GetValues" ObjectType="{x:Ty…
示例1.Selector(基类) 的示例Controls/SelectionControl/SelectorDemo.xaml <Page x:Class="Windows10.Controls.SelectionControl.SelectorDemo" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsof…
首先在xaml中创建集合是一个不可取的方法. 本方法仅作为xaml的学习. 本文略微无聊,主要是编写的东西都是老玩意. 首先是定义一个类,作为你要加载集合的模型. 结构如下 internal class Student { public string Name { get; set; } public int Age { get; set; } } internal class StudentList:List<Student> { } class StringCollect { public…
msdn中   ObservableCollection<T> 类    表示一个动态数据集合,在添加项.移除项或刷新整个列表时,此集合将提供通知. 在许多情况下,所使用的数据是对象的集合. 例如,数据绑定中的一个常见方案是使用 ItemsControl(如 ListBox.ListView 或 TreeView)来显示记录的集合. 可以枚举实现 IEnumerable 接口的任何集合. 但是,若要设置动态绑定,以便集合中的插入或删除操作可以自动更新 UI,则该集合必须实现 INotifyCo…
原文:WPF ContextMenu 在MVVM模式中绑定 Command及使用CommandParameter传参 ContextMenu无论定义在.cs或.xaml文件中,都不继承父级的DataContext,所以如果要绑定父级的DataContext,直接DataContext=“{Binding}”是行不通的 不能绑父级,但是能绑资源 第一步:定义一个中间类用来做资源对象 public class BindingProxy : Freezable { #region Overrides…
原文:封装:WPF中可以绑定的BindPassWord控件 一.目的:本身自带的PassWord不支持绑定 二.Xaml部分 <UserControl x:Class="HeBianGu.General.WpfControlLib.BindPassWordBox" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.micr…
最近的工作需要在程序界面上显示实时的系统时间,网上查了查大部分都是用Timer或者线程来实现. 个人非常不喜欢用Timer,感觉这东西有点太耗资源,然后思考了下觉得更好的方法应该是使用异步的方法在委托中更新时间,比线程简单,效率和性能上又要比Timer好很多. 实现方法很简单啦,先定义一个DateTime属性,当然要实现INotifyPropertyChanged属性,以便前台绑定: 然后是异步方法,在适当的地方调用即可: 最后Xaml中绑定CurrentTime属性: <TextBlock T…