2017-08-26 83 views
4

我试图将两个值绑定到一个标签的内容中,并在中间有一个空格。我正在关注MSDN的一个例子(MSDN Article),但我的标签是空的。下面是我的代码有:WPF Multibinding无法正常工作 - 标签为空

类:

public class Item 
{ 
    //Other properties removed to shorten 
    public string name { get; set; } 
    public string typeLine { get; set; } 
} 

设置项目来源:

ItemsDisplay.ItemsSource = searchResults; 

XAML:

<ItemsControl Name="ItemsDisplay"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 

      <Grid> 
       <!-- COLUMN DEFINITIONS ETC REMOVED TO SHORTEN --> 

       <StackPanel Grid.Column="1"> 
        <Label Name="ItemName" Margin="10"> 
         <Label.Content> 
          <MultiBinding StringFormat="{}{0} {1}"> 
           <Binding Path="name" /> 
           <Binding Path="typeLine" /> 
          </MultiBinding> 
         </Label.Content> 
        </Label> 

       </StackPanel> 

      </Grid> 

     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

如果我绑定一个值它完美例如

   <StackPanel Grid.Column="1"> 
       <Label Name="ItemName" Margin="10" Content="{Binding Path=name}" /> 
       <Label Name="ItemType" Margin="10" Content="{Binding Path=typeLine}" /> 
      </StackPanel> 

所以它似乎不是检索值的问题。

回答

2

您不能设置MultiBinding白色MultiValueConverter

试试这个:

<ItemsControl Name="ItemsDisplay"> 
    <ItemsControl.Resources> 
     <local:MyMultiConv x:Key="MyConv"/> 
    </ItemsControl.Resources> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <!-- COLUMN DEFINITIONS ETC REMOVED TO SHORTEN --> 
         <StackPanel Grid.Column="1"> 
          <Label Name="ItemName" Margin="10"> 
           <Label.Content> 
            <MultiBinding Converter="{StaticResource MyConv}"> 
             <Binding Path="name" /> 
             <Binding Path="typeLine" /> 
            </MultiBinding> 
           </Label.Content> 
          </Label> 
         </StackPanel> 
        </Grid> 
       </DataTemplate> 
      </ItemsControl.ItemTemplate> 
</ItemsControl> 

器和转换器:

public class MyMultiConv : IMultiValueConverter 
    { 
     public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
     { 
      return string.Format("{0} {1}", values[0], values[1]); 
     } 

     public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
     { 
      throw new NotImplementedException(); 
     } 
    } 

编辑

如果结合直接 “TextProperty” 你actualy可以:

<Textblock Name="ItemName" Margin="10"> 
     <Textblock.Text> 
       <MultiBinding StringFormat="{}{0} {1}"> 
        <Binding Path="name" /> 
        <Binding Path="typeLine" /> 
       </MultiBinding> 
     </Textblock.Text> 
</Textblock> 
+0

谢谢你的回复。它现在告诉我“本地:MyMultiConv”没有找到。 – Daniel

+0

我有我的MyMultiConv在WpfApp5 napesapce,所以我本地在xaml是: xmlns:local =“clr-namespace:WpfApp5” – sTrenat

+0

我已经把转换器放在命名空间关闭括号哈哈。谢谢你的工作。 – Daniel