将属性后面的代码绑定到 WPF XAML 中的数据上下文

问题描述 投票:0回答:1

我有一个数据网格,需要设置列格式类型,例如日期时间格式。

我的代码中有一个方法可以被调用,我可以从中设置列格式。

我在后面的代码中创建了一个 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>();
wpf xaml
1个回答
0
投票

好吧,看来我能弄清楚了。

在后面的代码中定义属性和依赖属性:

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");
}
© www.soinside.com 2019 - 2024. All rights reserved.