我在WPF中开发一个控件,我的控件包含一些其他WPF控件,如标签,按钮和一个DataGrid。所以,我一直在尝试创建一个依赖项属性,允许我从容器控件的外部获取dataGrid的DataSource。
到目前为止,我有这段代码:
public static readonly DependencyProperty dataSourceProperty = DependencyProperty.Register(
"DataSource",
typeof(object),
typeof(MyCustomControl));
public object DataSource
{
get
{
return (object)GetValue(dataSourceProperty);
}
set
{
SetValue(dataSourceProperty, value);
}
}
但我无法弄清楚的是我必须编写这段代码的地方:
myDataGrid.ItemsSource = DataSource;
我的意思是,我需要的是,在我的xaml文件中,能够做到这一点:
<MyCustomControl Name="MyControl" DataSource={Binding MyData}/>
我希望你能帮助我。提前谢谢。
答案 0 :(得分:2)
假设当前表单的datacontext具有属性MyData,您只需要以下内容:
<MyCustomControl Name="MyControl" DataContext={Binding MyData}/>
在您的自定义控件中,您可以使用以下命令绑定到MyData:
<DataGrid ItemsSource = "{Binding}"/>
答案 1 :(得分:1)
经过几个小时的研究后,我找到了问题的解决方案:
由于我需要从容器控件访问嵌套控件依赖项属性,所以我这样做了:
public static readonly DependencyProperty itemsSourceProperty = ItemsControl.ItemsSourceProperty.AddOwner(
typeof(MyCustomControl),
new FrameworkPropertyMetadata(
ItemsSourcePropertyChangedCallback));
public System.Collections.IEnumerable ItemsSource
{
get
{ return (System.Collections.IEnumerable)GetValue(itemsSourceProperty); }
set
{ SetValue(itemsSourceProperty, value); }
}
private static void ItemsSourcePropertyChangedCallback(DependencyObject controlInstance, DependencyPropertyChangedEventArgs args)
{
MyCustomControlraceUIGridControlInstance = (MyCustomControl)controlInstance;
raceUIGridControlInstance.extendedDataGrid.ItemsSource = (System.Collections.IEnumerable)args.NewValue;
}
完成后,您可以在XAML中写下:
<MyCustomControl Name=mycustomControl ItemsSource="{Binding YourData}" />
您可以使用任何嵌套控件依赖项属性执行此操作。