ComboBox Multibinding

时间:2014-06-11 17:12:53

标签: wpf combobox multibinding

我对WPF很新。我遇到了ComboBox的问题

        <ComboBox Grid.Column="2" Grid.Row="5" x:Name="ddlLocation" ItemsSource="{Binding Users.Locations}" Text="&lt;None Selected&gt;" IsEditable="True" IsReadOnly="True" SelectedValue="{Binding Users.SelectedUser.Location}">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <TextBlock>
                    <TextBlock.Text>
                        <MultiBinding StringFormat="{}{0} - {1}">
                            <Binding Path="Name" />
                            <Binding Path="ShortName" />
                        </MultiBinding>
                    </TextBlock.Text>
                </TextBlock>
            </DataTemplate>
        </ComboBox.ItemTemplate>
        <!--<ComboBox.SelectionBoxItemTemplate>
            <DataTemplate>
                <TextBlock>
                    <TextBlock.Text>
                        <MultiBinding StringFormat="{}{0} - {1}">
                            <Binding Path="Name" />
                            <Binding Path="ShortName" />
                        </MultiBinding>
                    </TextBlock.Text>
                </TextBlock>
            </DataTemplate>
        </ComboBox.SelectionBoxItemTemplate>-->
    </ComboBox>

如果我这样做,我会在选择框中输入typename。看起来我应该能够使用SelectionBoxItemTemplate,但它告诉我SelectionBoxItemTemplate没有可访问的setter。你会怎么做?

1 个答案:

答案 0 :(得分:1)

看起来这是我建议删除IsEditable="True"的结果,因为您还有IsReadOnly="True"

关于Text属性 - 当没有选择任何内容时的默认值...我会把它放在那里,但我希望有人有更好的解决方案...我没有看到任何东西快速浏览一下。

包含命名空间

xmlns:conv="clr-namespace:StackOverflow.Converters"

一些xaml

<ComboBox ... IsEditable="{Binding SelectedItem, RelativeSource={RelativeSource Self}, Converter={StaticResource NullBoolConverter}, FallbackValue=False}">
    <ComboBox.Resources>
        <conv:NullBoolConverter x:Key="NullBoolConverter" />
    </ComboBox.Resources>

转换器类

namespace StackOverflow.Converters
{
    class NullBoolConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return value == null;
        }
        ....
     }
}