给出具有固定数量属性的业务对象列表(例如,人员列表和具有属性FirstName,LastName,City,Department的人员
我想在listboxitem中显示每个人,并且能够定义执行显示的datatemplate。
现在的问题是:我不想显示网格状结构,但希望只看到填充的文本框,并且它们应该用逗号分隔:
" Karl,Miller,Chicago,Legal"当所有字段都填满时,但是 " Harry,Manning"当城市和部门是空的时候 " Maria,IT"当没有设置姓氏和城市时。
选择此任务的方法是什么? 此致
答案 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>
这个解决方案没有逗号,但在我真正建议之前,我需要确切地知道你想要它的样子。
或者,将MultiBinding
与IMultiValueConverter
一起使用。
答案 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的可见性。