我有一个组合框,该组合框绑定到一个集合,我想根据条件折叠其中的一些。
问题是,如果我在视图模型中选择了一个在视图中折叠的项目,但仍显示DisplayMemeberPath的文本,因此我试图将texblock的文本设置为空字符串。 / p>
我想我明白了,我的解决方案的问题是,当我选择和项目时,combobx的高度发生了变化,因此它的高度非常小,我看不到组合框。
我正在使用的代码是这样:
<ComboBox
ItemsSource="{x:Static vg:MyCOllection}"
SelectedItem="{Binding MySelectedItem}">
<ComboBox.ItemContainerStyle>
<Style TargetType="ComboBoxItem">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding MyCondition}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.ItemContainerStyle>
<ComboBox.ItemTemplate>
<DataTemplate>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding MyCondition}" Value="true">
<Setter Property="TextBlock.Text" Value="{Binding MyPropertyInItem}"/>
</DataTrigger>
<DataTrigger Binding="{Binding MyCondition}" Value="false">
<Setter Property="TextBlock.Text" Value=""/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
也许有更好的方法可以实现,所以我可以接受其他解决方案,在所选项目是组合框中折叠的项目之一的情况下,如何设置文本块的文本。
谢谢。
答案 0 :(得分:1)
在您的方案中不要使用DisplayMemberPath
。这将为选择框创建一个TextBlock
作为字符串值演示者,以替换ComboBoxItem
。
创建DisplayMemberPath
而不是DataTemplate
:
<ComboBox ItemsSource="{Binding MyCollection}">
<ComboBox.ItemContainerStyle>
<Style TargetType="ComboBoxItem">
<Style.Triggers>
<DataTrigger Binding="{Binding MyCondition}" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</ComboBox.ItemContainerStyle>
<ComboBox.ItemTemplate>
<DataTemplate DataType="{x:Type MyDataType}">
<TextBlock Text="{Binding MyPropertyInItem}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>