0

我正在 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}/>

我希望你能帮助我。先感谢您。

4

2 回答 2

2

假设当前表单的 datacontext 有一个属性 MyData,你只需要以下内容:

<MyCustomControl Name="MyControl" DataContext={Binding MyData}/>

在您的自定义控件中,您可以使用以下方法绑定到 MyData:

<DataGrid ItemsSource = "{Binding}"/>
于 2012-05-23T20:02:54.013 回答
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}" />

您可以使用任何嵌套控件依赖项属性来执行此操作。

于 2012-05-24T14:40:29.270 回答