列表框中以逗号分隔的文本框

时间:2016-07-14 21:51:42

标签: wpf separator listboxitem

给出具有固定数量属性的业务对象列表(例如,人员列表和具有属性FirstName,LastName,City,Department的人员

我想在listboxitem中显示每个人,并且能够定义执行显示的datatemplate。

现在的问题是:我不想显示网格状结构,但希望只看到填充的文本框,并且它们应该用逗号分隔:

" Karl,Miller,Chicago,Legal"当所有字段都填满时,但是 " Harry,Manning"当城市和部门是空的时候 " Maria,IT"当没有设置姓氏和城市时。

选择此任务的方法是什么? 此致

2 个答案:

答案 0 :(得分:0)

使用触发器。

<ListBox ItemsSource="{Binding MyObjects}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <StackPanel.Resources>
                    <Style TargetType="TextBlock" BasedOn="{DynamicResource x:Type TextBlock}">
                        <Style.Triggers>
                            <Trigger Property="TextBlock.Text" Value="">
                                <Setter Property="Visibility" Value="Collapsed" />
                            </Trigger>
                            <Trigger Property="TextBlock.Text" Value="{x:Null}">
                                <Setter Property="Visibility" Value="Collapsed" />
                            </Trigger>
                        </Style.Triggers>
                    </Style>
                </StackPanel.Resources>
                <TextBlock Text="{Binding FirstName}" />
                <TextBlock Text="{Binding LastName}" />
                <TextBlock Text="{Binding City}" />
                <TextBlock Text="{Binding Department}" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

这个解决方案没有逗号,但在我真正建议之前,我需要确切地知道你想要它的样子。

或者,将MultiBindingIMultiValueConverter一起使用。

答案 1 :(得分:0)

解决这个问题: 在Xaml我有这个结构:                                  

...

            <local:CaptionedTextBox Caption="{x:Static p:Resources.EMail}"
                                    Text="{Binding EMail.Value}"
                                    Visibility="{Binding EMail.Value,
                                                         Converter={StaticResource LengthToVisibilityConverter}}" />
            <local:SeparatorBox Visibility="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource LastFilledToVisibilityConverter}}" />

            <local:CaptionedTextBox Caption="{x:Static p:Resources.Mobile}"
                                    Text="{Binding Mobile.Value,
                                                   UpdateSourceTrigger=PropertyChanged}"
                                    Visibility="{Binding Mobile.Value,
                                                         Converter={StaticResource LengthToVisibilityConverter}}" />
            <local:SeparatorBox Tag="HIDE" Visibility="{Binding RelativeSource={RelativeSource Self}, Converter={StaticResource LastFilledToVisibilityConverter}}" />

所以,基本上我有交替的Text和Separator元素的列表。

列表中的最后一个元素是TAG = HIDE的分隔符。

在转换器中,我只为不必要的分隔符设置TAG到HIDE,最后设置所有分隔符与TAG的可见性。