2016-07-14 55 views
0

逗号分隔的文本框中给出一个固定数量的属性的业务对象(人例如列表,并与性能的名字,姓氏,城市人的名单,系在列表框中

我想显示每个并且能够定义一个可以显示的数据模式。

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

“卡尔,米勒,芝加哥,法律”当所有字段都填满后,但 当市和部门空的时候“Harry,Manning” 未设置姓氏和城市时,“Maria,IT”。

哪种方法可以选择此任务? Regards

回答

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

+0

嗨,你的解决方案是正确的不显示空的文本框。对于剩余的可见文本框,我想用逗号分隔它们,以便在城市是empyt时获得“Karl,Mayer,Legal”,当Firstname和Department为空时,我得到“Miller,Chicago” – klawusel

+0

而且我需要单个文本框的每个属性,因为我想要仍然可以编辑它们,所以任何使用汇总字符串的解决方案都不够 – klawusel

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}}" /> 

所以,基本上我有交替的文本和分隔的元素列表。

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

在转换器中,我只将TAG设置为不需要的分隔符设置为隐藏,最后设置所有分隔符关于标签的可见性。