列表视图中的多绑定

时间:2011-05-18 14:22:10

标签: wpf listview multibinding

我有一个包含几列的ListView。我没有问题将每个GridViewColumn绑定到属性,例如:

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

当我尝试将GridViewColumn多个绑定到两个属性时,问题就出现了:

<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时 - 列表视图中没有显示任何内容(空),当它为真时 - 显示HighestScore值,但这不起作用 - 所有我即使''IsHighestScoreApplicable'为真,get也是一个空列。 此外,当我调试Convert()方法时,我可以看到if语句:

 if (bool_value == true)

成立,返回的值为int_value,但列表视图中仍未显示任何内容。

怎么了?

所有最好的, 戴夫

3 个答案:

答案 0 :(得分:8)

几分钟前,我需要在列表视图中进行多重绑定。

我是怎么做到的:

我为细胞制作了一个数据模板。 datatemplate包含一个文本块,在该文本块上我们进行多重绑定。

<ListView Margin="33,0,0,0" ItemsSource="{Binding HourRegistry}">
        <ListView.View>
            <GridView>
                <GridViewColumn Width="200" Header="Worker" >
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock>
                                <TextBlock.Text>
                                    <MultiBinding StringFormat="{}{0} {1}">
                                        <Binding Path="Employee.FirstName" />
                                        <Binding Path="Employee.Name" />
                                    </MultiBinding>
                                </TextBlock.Text>
                            </TextBlock>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn Width="100" Header="Job"  DisplayMemberBinding="{Binding Path=Keycode}"/>
            </GridView>
        </ListView.View>

可能迟到但对其他人来说很方便

答案 1 :(得分:0)

顾名思义,

DisplayMemberBinding不是值,而是指向应显示的成员(属性)的绑定。如果您有复杂的方法来检索值,则可以使用CellTemplate

为了说明上述说明:您的转换器可能会返回DisplayMemberBinding="42",因为没有找到任何绑定或成员,所以它看起来很不合适。

答案 2 :(得分:0)

试试

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

当我复制你的问题时它已经有效了