0

WPFでコントロールを開発しています。コントロールには、ラベル、ボタン、1つのDataGridなどの他のWPFコントロールが含まれています。したがって、私がやろうとしているのは、コンテナコントロールの外部からdataGridのデータソースを取得できるようにする依存関係プロパティを作成することです。

これまでのところ、私はこのコードを持っています:

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

現在のフォームのデータコンテキストにプロパティ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 に答える