【问题标题】:WPF Multibinding not working - Labels are blankWPF 多绑定不起作用 - 标签为空白
【发布时间】:2018-02-04 08:22:19
【问题描述】:

我试图将两个值绑定到一个标签的内容中,中间有一个空格。我正在关注 MSDN (MSDN Article) 中的一个示例,但我的标签是空的。这是我的代码:

类:

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>

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

【问题讨论】:

    标签: c# wpf data-binding multibinding


    【解决方案1】:

    你不能设置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”,你实际上可以:

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

    【讨论】:

    • 感谢您的回复。它现在告诉我找不到“local:MyMultiConv”。
    • 我在 WpfApp5 napesapce 中有我的 MyMultiConv,所以我在 xaml 中的本地是:xmlns:local="clr-namespace:WpfApp5"
    • 我已将转换器放在命名空间右大括号下方,哈哈。谢谢你的工作。
    • 我做了编辑,我犯了一个小错误;d 有一种情况你可以在没有转换器的情况下做到这一点:)
    猜你喜欢
    • 1970-01-01
    • 2016-06-22
    • 2022-01-11
    • 2011-10-02
    • 1970-01-01
    • 2018-04-07
    • 1970-01-01
    相关资源
    最近更新 更多