我有一个数据网格,需要设置列格式类型,例如日期时间格式。
我的代码中有一个方法可以被调用,我可以从中设置列格式。
我在后面的代码中创建了一个 DependencyProperty 字典来存储/检索以下值:
public Dictionary<string, string> ColumnFormatType
{
get { return (Dictionary<string, string>)GetValue(ColumnFormatTypeProperty); }
set { SetValue(ColumnFormatTypeProperty, value); }
}
public static readonly DependencyProperty ColumnFormatTypeProperty
= DependencyProperty.Register("ColumnFormatType", typeof(Dictionary<string, string>), typeof(UserControlDataGrid), new PropertyMetadata(false));
当我尝试将属性添加到 XAML 以将其绑定到 ViewModel 时,我收到“在 UserControl 类型中找不到属性 ColumnFormatTypeProperty”错误。
<UserControl x:Class="UserControlDataGrid" ColumnFormatTypeProperty="{Binding ColumnFormatTypes}" />
在哪里/如何将 ColumnFormatTypes 属性绑定到我的 ViewModel,以便我可以使用代码隐藏中的值? 也许有一种方法可以从代码隐藏中绑定它?
或者我应该让用于控件的视图模型实现一个接口并直接通过 DataContext 访问属性(这似乎违反了 MVVM 原则)?
附注我进行了广泛的搜索,但我找到的每个答案都谈到将属性绑定到控件上的属性,而不是绑定到 UserControlDataGrid 后面的代码中的属性。
pps。我发现这段代码可以从后面的代码中绑定:
SetBinding(ColumnFormatTypeProperty, "ColumnFormatTypes");
但我收到错误:默认值类型与属性“ColumnFormatType”的类型不匹配。
这是我的 ViewModel 上的属性:
public Dictionary<string, string> ColumnFormatTypes { get { return _columnFormatType; } set { _columnFormatType = value; NotifyPropertyChanged(); } }
Dictionary<string, string> _columnFormatType = new Dictionary<string, string>();
好吧,看来我能弄清楚了。
在后面的代码中定义属性和依赖属性:
public Dictionary<string, string> ColumnFormatType
{
get { return (Dictionary<string, string>)GetValue(ColumnFormatTypeProperty); }
set { SetValue(ColumnFormatTypeProperty, value); }
}
public static readonly DependencyProperty ColumnFormatTypeProperty
= DependencyProperty.Register("ColumnFormatType", typeof(Dictionary<string, string>), typeof(UserControlDataGrid), new PropertyMetadata(default(Dictionary<string, string>)));
然后在类的构造函数中设置绑定:
public UserControlDataGrid()
{
InitializeComponent();
SetBinding(ColumnFormatTypeProperty, "ColumnFormatTypes");
}