I have UserControl
,我们称其为CustomDataGrid
,其中包含DataGrid
。剩下的内容并不重要。SelectedItem
的财产DataGrid
必须是SelectedItem
的财产CustomDataGrid
。我希望能够使用Binding
有了这个属性,因为我使用MVVM
图案。所以我必须声明SelectedItem
as DependencyProperty
in CustomDataGrid
。但我不知道如何才能正确地做到这一点......
就是这样DepedencyProperty
-s 通常声明:
public static readonly DependencyProperty SelectedItemProperty = DependencyProperty.Register(
"SelectedItem", typeof(Object), typeof(CustomDataGrid),
new FrameworkPropertyMetadata(default(Object), SelectedItemPropertyCallback)
{
BindsTwoWayByDefault = true,
DefaultUpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
});
// Optionally
private static void SelectedItemPropertyCallback(DependencyObject obj, DependencyPropertyChangedEventArgs e)
{
// dataGrid - `DataGrid` nested in `UserControl`
((CustomDataGrid)obj).dataGrid.SelectedItem = e.NewValue;
}
// Obviously, it has no any link with nested `dataGrid`. This is the problem.
public Object SelectedItem
{
get { return GetValue(SelectedItemProperty); }
set { SetValue(SelectedItemProperty, value); }
}
那么,我该如何声明SelectedItem
属性正确吗?
您可以利用绑定框架将此类属性从底层对象连接到外部容器
示例假设CustomDataGrid
as UserControl
class CustomDataGrid : UserControl
{
public CustomDataGrid()
{
Binding b = new Binding("SelectedItem");
b.Source = this;
b.Mode = BindingMode.TwoWay;
dataGrid.SetBinding(DataGrid.SelectedItemProperty, b);
}
public object SelectedItem
{
get { return (object)GetValue(SelectedItemProperty); }
set { SetValue(SelectedItemProperty, value); }
}
// Using a DependencyProperty as the backing store for SelectedItem. This enables animation, styling, binding, etc...
public static readonly DependencyProperty SelectedItemProperty =
DependencyProperty.Register("SelectedItem", typeof(object), typeof(CustomDataGrid), new PropertyMetadata(null));
}
我创建了一个名为SelectedItem
in CustomDataGrid
并设置双向绑定SelectedItem
实际的dataGrid
inside.
因此这将连接这些属性并来回传播任何更改。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)