【问题标题】:Multibinding within a list view列表视图中的多重绑定
【发布时间】:2011-08-28 03:00:41
【问题描述】:

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

 if (bool_value == true)

保持,返回值为 int_value ,但列表视图上仍然没有显示任何内容。

怎么了?

一切顺利, 戴夫

【问题讨论】:

    标签: wpf listview multibinding


    【解决方案1】:

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

    为了说明上述解释:您的转换器可能会返回 DisplayMemberBinding="42",因为没有找到绑定或成员,因此看起来很不正常。

    【讨论】:

      【解决方案2】:

      试试看

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

      当我重现您的问题时它已经工作了

      【讨论】:

        【解决方案3】:

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

        我是怎么做到的:

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

        <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>
        

        也许迟到但对其他人很方便

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-11-10
          • 2010-10-28
          • 2016-10-27
          • 2017-02-21
          • 1970-01-01
          • 2020-10-24
          • 1970-01-01
          • 2023-03-14
          相关资源
          最近更新 更多