【问题标题】:How to bind an ObservableCollection to a combobox in WPF?如何将 ObservableCollection 绑定到 WPF 中的组合框?
【发布时间】:2020-10-06 01:29:28
【问题描述】:

我对此感到困惑,即使在阅读了很多主题后,我也能找到答案。

这里我尝试使用 MVVM 模式将可观察集合绑定到 WPF 中的组合框:

Scenario.cs

{
    public class Scenario
    {
        public string name { get; set; }
        public string codeClient { get; set; }
        public string codeAppli { get; set; }
        public string infoComplementaire { get; set; }
    }
}

scenarioVM.cs

    {
        public ObservableCollection<Scenario> Scenarios { get; set; }
    }

MainWindows.xaml

&lt;ComboBox x:Name="cbScenario" ItemsSource="{Binding Scenarios}" DisplayMemberPath="{Binding Path=Name}" HorizontalAlignment="Left" Margin="407,8,0,0" VerticalAlignment="Top" Width="226" BorderBrush="#FF1585B5" Height="26"/&gt;

感谢您的帮助:)

【问题讨论】:

  • 如何在MainWindow中设置DataContext?
  • 像这样:public MainWindow() { InitializeComponent();数据上下文 = 这个; this.Loaded += MetroWindow_Loaded; }
  • 试试 DisplayMemberPath="Name"
  • 嗨 Niklas,我做了,但它也不起作用
  • 可能是一个愚蠢的问题,但可以肯定的是,您的 ObservableCollection 有项目?

标签: wpf combobox binding observablecollection


【解决方案1】:

如果您将DataContext 设置为this,则如果Scenarios 是您的ScenarioVM 的一部分而不是您的窗口,您将找不到它。 DataContext 是任何 Binding 的根。

首先你可以这样做。

public ScenarioVM VM {get; private set;}

public MainWindow() 
{ 
    VM = new ScenarioVM();
    InitializeComponent(); 
    DataContext = VM; 
    this.Loaded += MetroWindow_Loaded; 

    VM.Scenarios.Add(new Scenario());
} 

现在您的窗口拥有一个 ScenarioVM 实例。不一定是好的设计,而是一个开始。

您迟早会遇到问题,即您的场景不是源自INotifyPropertyChanged,因此您可能也想解决这个问题。

【讨论】:

  • 对不起,它不起作用,现在我有一个 nullReferenceException。我怎样才能使它成为更好的设计?
  • 您在添加到场景时可能有一个空引用,我认为这是您未显示代码的一部分。所以事先初始化它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-03
  • 2018-12-20
  • 1970-01-01
  • 1970-01-01
  • 2012-11-12
  • 2011-05-07
相关资源
最近更新 更多