选择项目时组合框的高度发生变化

时间:2020-06-25 14:08:37

标签: c# wpf

我有一个组合框,该组合框绑定到一个集合,我想根据条件折叠其中的一些。

问题是,如果我在视图模型中选择了一个在视图中折叠的项目,但仍显示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>

也许有更好的方法可以实现,所以我可以接受其他解决方案,在所选项目是组合框中折叠的项目之一的情况下,如何设置文本块的文本。

谢谢。

1 个答案:

答案 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>
相关问题