c# - 如何在每个wpf/MVVM组合框行上显示2个字符串?

标签 c# wpf xaml mvvm combobox

编辑:这实际上适用于两种情况,但跟踪更改并没有帮助我找到真正的问题。因此,模板不是问题的根源。

我每一行都有一个类:

public class OptionItem
{
    public int Id { get; set; }
    public string Label { get; set; }
    public string BitMap { get; set; }
}

现在,当我的XAML如下所示时,一切正常(显示标签):
<ComboBox Grid.Row="0" Grid.Column="0" Name="OptionsComboBox" ItemsSource="{Binding Path=OptionsItemsSource}" DisplayMemberPath="Label" SelectedItem="{Binding Path=SelectedOptionItem, Mode=TwoWay}" />

但是,当我尝试(错误地)使用ItemTemplate时,组合框为空(通常调用ItemsSource的get-accessor并具有项目):
<ComboBox Grid.Row="0" Grid.Column="0" Name="OptionsComboBox" ItemsSource="{Binding Path=OptionsItemsSource}" SelectedItem="{Binding Path=SelectedOptionItem, Mode=TwoWay}">
        <ComboBox.ItemTemplate>
            <DataTemplate>
                <WrapPanel>
                    <TextBlock Text="{Binding Path=Label}"/>
                    <TextBlock Text="{Binding Path=BitMap}"/>
                </WrapPanel>
            </DataTemplate>
        </ComboBox.ItemTemplate>
</ComboBox>

其余的事情都在下面。我知道我使用的是我们自己的类,这里没有解释,但是我想强调一下,组合框可以在没有模板的情况下工作(尽管只有一个字符串),所以这些应该不会太有趣。

ViewModel中所选项目的属性:
    private OptionItem _selectedOptionItem;
    public OptionItem SelectedOptionItem
    {
        get { return _selectedOptionItem; }
        set
        {
            // to raise property changed
            SetValue(ref _selectedOptionItem, value);
        }
    }

和ViewModel中的itemssource:
    private ItemsSource<OptionItem> _optionsItemsSource;
    public ItemsSource<OptionItem> OptionsItemsSource
    {
        get { return _optionsItemsSource; }
        private set
        {
            // to raise property changed
            SetValue(ref _optionsItemsSource, value);
        }
    }

最佳答案

WrapPanel中使用时,ItemTemplate可能无法正常工作。尝试使用水平StackPanel代替:

<DataTemplate>
    <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding Path=Label}"/>
        <TextBlock Text="{Binding Path=BitMap}"/>
    </StackPanel>
</DataTemplate>

关于c# - 如何在每个wpf/MVVM组合框行上显示2个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38054180/

相关文章:

c# - 如何在不同文件中拆分 C# 和 HTML 的 Blazor WASM 组件代码?

c# - 'big' 使用 Poco 和 ORM 有什么优势?

c# - XML 元素重新排序不起作用 XSLT

c# - 流利的 NHibernate - HasManyToMany NHibernate.MappingException : Repeated column in mapping for collection

c# - 在 WPF 中调整网格内的 Canvas

WPF/Silverlight : How to DataTrigger a Storyboard Animation in MVVM?

c# - 无论如何将命令绑定(bind)到 XAML/WPF/MVVM 中的用户控件中的按钮的所有实例

c# - ObservableCollection 引发 "Item[]"的 PropertyChange 的目的是什么?

c# - WPF 中的空闲检测

wpf - 通用 ReactiveUserControl "cannot be edited in Design view"