我有一个包含几列的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,但列表视图中仍未显示任何内容。
怎么了?
所有最好的, 戴夫
答案 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();
当我复制你的问题时它已经有效了