2016-04-12 20 views
0

私はこの時点まで私にとってうまくいきましたhereのソリューションから作業しています。 「認識されないか、アクセスできませんされてメンバー 『のSelectedItem』」私はこのコードを入力するとインターフェイスへのWPFデータバインディングがプロパティを見つけることができません

<DataGrid.RowStyle> 
    <Style TargetType="{x:Type DataGridRow}"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=(selection:IChartDefinitionViewModel.SelectedItem).HasErrors}" Value="False"> 
     <Setter Property="Background" Value="Transparent"/> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding Path=(selection:IChartDefinitionViewModel.SelectedItem).HasErrors}" Value="True"> 
     <Setter Property="Background" Value="Red"/> 
     </DataTrigger> 
    </Style.Triggers> 
    </Style> 
</DataGrid.RowStyle> 

が、私は警告を取得し、私は今datatrigger以下のXAMLを経由して界面特性への結合を実行しようとしています私は実行しようとすると同様の例外が発生します。唯一のものはインターフェイスで定義されたメンバーのSelectedItemがある、ある、と私もXAMLからそれにナビゲートすることができますなぜこれが起こっている

public interface IChartDefinitionViewModel : IReactiveSelector<SomeClass>, IMayHaveErrors 
{ 
    // stuff 
} 

public interface IReactiveSelector<T> : // more stuff 
{ 
    T SelectedItem { get; set; } 
} 

は誰が助言することができ、私はこの問題を回避するために何ができるのでしょうか?可能であれば、インターフェイス定義に基づいてこれを管理したり、IChartDefinitionViewModelの実装にデータテンプレートを使用したりしたいと思います。

更新: また、これは動作しませんが、さまざまな理由のために - 私は直接オブジェクトにバインドしようとすると、背景がHasErrorsがtrueからfalseに切り替えますという事実にもかかわらず、変更されません。

<DataGrid.RowStyle> 
    <Style TargetType="{x:Type DataGridRow}"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding SelectedItem.HasErrors}" Value="True"> 
     <Setter Property="Background" Value="Transparent"/> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding SelectedItem.HasErrors}" Value="False"> 
     <Setter Property="Background" Value="Red"/> 
     </DataTrigger> 
    </Style.Triggers> 
    </Style> 
</DataGrid.RowStyle> 
+1

データバインディングは、実装されていないインターフェイスではなく、データコンテキストに対して機能します。ウィンドウまたはグリッドのデータコンテキストを* any *オブジェクトに設定した場合、オブジェクトがそのプロパティを持つ限り、任意のプロパティに名前でバインドできます。インターフェイスは必要ありません。 –

+0

わかりました - 残念ながら、オブジェクトに直接バインドするとバインディングが動作しないように見えます(更新を参照)。 – ket

+1

あなたの編集は、すべての部分が適切な場所にある限り、私にとってはうまくいきます。しかし、あなたの 'DataContext'が混在している可能性はありますか?各行は本当に 'SelectedItem'プロパティを持っていますか? ' –

答えて

1

オリジナルの投稿に2つの問題があるようです。最初は、datacontextの問題がありました - これを指摘してくれたJames Durdaに感謝します。行コンテキストは、型ChartDefinitionViewModelであるので、このコードは、必要に応じて動作します。

<DataGrid.RowStyle> 
    <Style TargetType="{x:Type DataGridRow}"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=(selection:ChartDefinitionViewModel.HasErrors)}" Value="False"> 
     <Setter Property="Background" Value="Transparent"/> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding Path=(selection:ChartDefinitionViewModel.HasErrors)}" Value="True"> 
     <Setter Property="Background" Value="Red"/> 
     </DataTrigger> 
    </Style.Triggers> 
    </Style> 
</DataGrid.RowStyle> 

興味深いことに、しかし、プロパティパスをもたらしている、無効であることを示すスローされた例外でIChartDefinitionViewModelインタフェース結果にHasErrorsプロパティに結合私は再び私の元へお問い合わせ:

<DataGrid.RowStyle> 
    <Style TargetType="{x:Type DataGridRow}"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=(selection:IChartDefinitionViewModel.HasErrors)}" Value="False"> 
     <Setter Property="Background" Value="Transparent"/> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding Path=(selection:IChartDefinitionViewModel.HasErrors)}" Value="True"> 
     <Setter Property="Background" Value="Red"/> 
     </DataTrigger> 
    </Style.Triggers> 
    </Style> 
</DataGrid.RowStyle> 

物事は、しかし、私はHasErrorsプロパティを直接定義されているインターフェイスにバインドするとき、期待どおりに動作し始めます。

<DataGrid.RowStyle> 
    <Style TargetType="{x:Type DataGridRow}"> 
    <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=(interfaces:IMayHaveErrors.HasErrors)}" Value="False"> 
     <Setter Property="Background" Value="Transparent"/> 
     </DataTrigger> 
     <DataTrigger Binding="{Binding Path=(interfaces:IMayHaveErrors.HasErrors)}" Value="True"> 
     <Setter Property="Background" Value="Red"/> 
     </DataTrigger> 
    </Style.Triggers> 
    </Style> 
</DataGrid.RowStyle> 

私は、これは孤立しそうであるかどうかわからないんだけど、WPFのバインディングは、少なくともこの例では、インターフェイスの継承階層に上向きに定義されたプロパティを見つけることができないことが表示されます。

関連する問題