0

プロパティを添付しました

    public static ObjectContext GetObjectContext(DataGrid obj)
    {
        return (ObjectContext)obj.GetValue(ObjectContextProperty);
    }

    public static void SetObjectContext(DataGrid obj, ObjectContext value)
    {
        obj.SetValue(ObjectContextProperty, value);
    }

    public static readonly DependencyProperty ObjectContextProperty =
        DependencyProperty.RegisterAttached("ObjectContext", typeof(ObjectContext), typeof(FilterableGrid));

また、正しい ObjectContext に設定された Context プロパティを持つ ViewModel もあります (デバッガーでチェック)。

そして、この XAML コード:

<DataGrid AutoGenerateColumns="False" Name="gridOrders"
              local:FilterableGrid.ObjectContext="{Binding Context}" local:FilterableGrid.IsFilterableGrid="True">

local は私の名前空間です。

IsFilterableGrid の変更されたイベント (接続された動作) でこのコードを使用して、オブジェクト コンテキストを取得します。

ObjectContext context = FilterableGrid.GetObjectContext(sourceGrid);

そして、コンテキスト変数は常に null になります。グリッドの DataContext は null ではなく、正しいオブジェクト (ViewModel) を指していますが。

何か案は?これで正気を失いそうです…

編集:もう少し調査しましたが、バインドするlocal:FilterableGrid.IsFilterableGrid="{Binding IsFilterable}"と完全に機能します。しかし、local:FilterableGrid.ObjectContext="{Binding Context}"そうではありません!渡される値の型と何か関係があるのか​​もしれません (プリミティブ型である文字列の代わりに ObjectContext または bool と言いますか?)。

4

1 に答える 1

0

私は最終的にこれを解決しましたが、何が助けになったのかさえわかりません.NETまたはVSの一種のバグのようです。

私がしたことは、いくつかのプロパティ メタデータを RegisterAttached 呼び出しに追加し、OnChanged デリゲートを追加したことです。その後、機能し始めました(正しくバインドされています)。次に、RegisterAttached 呼び出しからプロパティ メタデータを削除すると、引き続き動作しました。

ですから、それが何だったのかはわかりませんが、今では機能しています。

于 2011-04-13T10:54:51.570 に答える