我刚刚开始创建一个用户控件,意识到我需要更多的DataGrid。暂时不要担心细节,但我创建了一个名为TheColumns的DependencyProperty:
public static readonly DependencyProperty TheColumnsProperty = DependencyProperty.Register("TheColumns", typeof(List<DataGridColumnItem>), typeof(ExtendedDataGrid), null);
DataGridColumnItem
只是我创建的一个独立类,用于保存列信息等。
然后我声明了一个属性来获取并设置值:
public List<DataGridColumnItem> TheColumns
{
get
{
return (List<DataGridColumnItem>)GetValue(TheColumnsProperty);
}
set
{
SetValue(TheColumnsProperty, value);
TheDataGrid.Columns.Clear();
foreach (var col in TheColumns)
{
var newCol = new DataGridTextColumn();
newCol.Header = col.Header;
var columnBinding = new Binding(col.DataBindingMember);
newCol.Binding = columnBinding;
TheDataGrid.Columns.Add(newCol);
}
}
}
好吧,在我正确执行之前这是一个简单的测试因为我想从视图模型中设置我的列,因为dataGrid本身没有正确的列绑定。哦,我想确定colum顺序,可见性以及在运行时实际显示的内容,而不是xaml。
我的视图模型中有一个名为GridColumns的属性声明为:
public List<DataGridColumnItem> GridColumns
....
我在xamle中有这个属性,如:
TheColumns="{Binding Path=GridColumns}"
好的,现在我创建了一个视图模型的实例,并将其设置为用户控件所在的Window的DataContext。当我运行它时,属性IS从视图模型中读取,但依赖项属性上的setter不会触发。如果我重新编码xaml赋值,则视图模型上的属性不会触发。因此,该财产正在被阅读但未被使用。
答案 0 :(得分:2)
你碰到了这个:Setters not run on Dependency Properties?
基本上你需要连接PropertyChangedCallback
并在那里做你的逻辑。