2

いくつかの列を持つ ListView があります。各 GridViewColumn をプロパティにバインドしても問題ありません。たとえば、次のようになります。

<ListView ItemsSource="{Binding MyList}">
    <ListView.View>
        <GridView>
            <GridViewColumn DisplayMemberBinding="{Binding Name}">
                <GridViewColumnHeader Content="Name"/>
            </GridViewColumn>
        </GridView>
   </ListView.View>
</ListView>

GridViewColumn を 2 つのプロパティにマルチバインドしようとすると、問題が発生します。

<GridViewColumn>
    <GridViewColumn.DisplayMemberBinding>
        <MultiBinding Converter="{StaticResource DisplayMemberConverter}">
            <Binding Path="HighestScore"/>
            <Binding Path="IsHighestScoreApplicable"/>
        </MultiBinding>
   </GridViewColumn.DisplayMemberBinding>
   <GridViewColumnHeader Content"Highest_Score"/>

私が使用するコンバーターは次のとおりです。

public class DisplayMemberConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {            
        int int_value = (int)values[0];
        bool bool_value = (bool)values[1];

        if (bool_value == true)
            return int_value;

        return null;
    }

   ...    
}

「IsHighestScoreApplicable」プロパティがfalseの場合-リストビューに何も表示されず(空)、trueの場合-HighestScore値が表示されますが、うまくいきません-私が得るのは''IsHighestScoreApplicable' が true の場合でも空の列。さらに、Convert() メソッドをデバッグすると、if ステートメントが次のようになっていることがわかります。

 if (bool_value == true)

保持され、戻り値は int_value ですが、それでもリスト ビューには何も表示されません。

どうしたの?

万歳、デイブ

4

3 に答える 3

0

ちょうど試して

if (bool_value == true)
        return int_value.ToString();

私があなたの問題を再現したとき、それはうまくいきました

于 2011-05-18T14:57:44.737 に答える
0

DisplayMemberBinding名前が示すように、値ではなく、表示するメンバー (プロパティ) を指すバインディングです。CellTemplate値を取得する複雑な方法がある場合は、 を使用できます。

(上記の説明を説明するために:バインディングやメンバーが見つからないため、コンバーターが返さDisplayMemberBinding="42"れる可能性があります。 )

于 2011-05-18T14:49:25.660 に答える