0

Silverlight4 を使用しています。

DataGrid 用に定義された DataTemplate があり、好みに合わせて値を正常に表示できます。この DataTemplate 内に、Value プロパティに Converter を持つ Rating コントロールがあります。

<DataTemplate>
    <toolkit:Rating Value="{Binding Converter={StaticResource MyConverter}" ItemCount="5" />
</DataTemplate>

コードをステップ実行してコンバーターに入ると、value パラメーターがテンプレートによってレンダリングされる行に対応する項目ではなく、DataGrid 自体の DataContext である ViewModel であることがわかります。

さて、これを少し調整すると、

<DataTemplate>
    <toolkit:Rating Value="{Binding SomeProperty Converter={StaticResource MyConverter}" ItemCount="5" />
</DataTemplate>

MyConverter に渡される値は、DataTemplate によってレンダリングされるアイテムの SomeProperty です。

これがなぜなのか誰か知っていますか?DataGrid の DataContext ではなく、テンプレートが参照する項目にバインドするにはどうすればよいですか?

4

2 に答える 2

0

私はこれを理解しました。

Silverlight の DataGrid の MeasureOverride 段階で、コンバーターが呼び出されています。DataGrid の MeasureOverride の実装のバグのように感じて、

<DataGrid ItemsSource="{Binding MySource}"></DataGrid>

この段階で定義済みの DataTemplate に関して式をバインドし、DataGrid の DataContext を使用すると、典型的な Converter が確実に失敗します。

今のところ私の一時的な解決策は、コンバーターの実装に if ステートメントを追加して、取得する値の型が期待どおりであることを確認して、MeasureOverride を渡すことです。

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    if (value is ExpectedType)
        //do things
    else
       //return an instance of targetType
}

これがSL5でも発生するかどうかを確認できますか?

于 2012-06-01T18:03:00.237 に答える
0

試す"{Binding ., Converter={StaticResource MyConverter}"

于 2012-06-01T17:07:28.187 に答える