【问题标题】:WPF MVVM: Binding to property of objectWPF MVVM:绑定到对象的属性
【发布时间】:2020-04-01 08:59:03
【问题描述】:

我尝试使用绑定在我的 ComboBox 中显示值。但我不知道为什么它不起作用:

<ComboBox Width="476" Height="30" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="10,10,0,0" ItemsSource="{Binding Maps.Name}"></ComboBox>

这是我的 C#:

public class Map
{
    public string Name { get; set; }
    public string ImagePath { get; set; }
}

还有主要的:

class MainWindowViewModel : BindableBase
{
    public ObservableCollection<Map> Maps { get; set; }

    public MainWindowViewModel()
    {
        Maps = mainWindowModel.LoadMapFiles(); //deserializes maps, i checked it, LoadMapFiles() works
    }
}

如果我想让 ComboBox ItemSource 显示每个 Map.Name,我应该在 ComboBox ItemSource 中写什么?

【问题讨论】:

    标签: c# wpf mvvm combobox binding


    【解决方案1】:

    表达式Maps.Name 不是有效的绑定路径,因为Name 不是MapsObservableCollection&lt;Map&gt; 的属性。

    ItemsSource属性绑定到集合属性,通过DisplayMemberPath设置显示属性:

    <ComboBox ItemsSource="{Binding Maps}" DisplayMemberPath="Name" ... />
    

    还要确保 Maps 属性设置器触发更改通知,或将属性设为只读:

    public ObservableCollection<Map> Maps { get; }
    

    【讨论】:

    • 真的,就这么简单吗?我整个晚上都找不到这种方法。非常感谢!