【问题标题】:WPF: Binding Combobox in Code Behind to PropertyWPF:将代码后面的组合框绑定到属性
【发布时间】:2010-03-17 10:40:27
【问题描述】:

这可能是非常直截了当的事情,我真的认为它应该按原样工作,但事实并非如此......我有以下情况:

var itemSource = new Binding
{
    Path = new PropertyPath("ItemList"),
    Mode = BindingMode.OneTime
};       

comboBox.SetBinding(ItemsControl.ItemsSourceProperty, itemSource);

ItemList 很简单:

public IList<string> ItemList
{
   get
   {
        return Enum.GetNames(typeof(OptionsEnum)).ToList();
   }
}

我本来希望这会将项目列表绑定到 Combobox,当我在 XAML 中执行此操作时,它工作正常,但我必须在后面的代码中执行此操作...

有什么想法吗?

【问题讨论】:

  • 为什么一定要在代码中做呢?
  • 必须在代码中完成,因为我根据特定设置将组合框绑定到不同的属性。可以在 UI 中放置两个单独的组合框并在 XAML 中绑定它们,然后在我需要的那个上设置可见性,但如果我可以在路由后面编写代码,那我认为这不是正确的方法。
  • 我会在视图模型中创建一个属性来检查设置并公开适当的列表,而不是使用代码隐藏。它更容易测试。
  • 好点罗伯特...没想到这一点!谢谢!

标签: c# wpf binding combobox


【解决方案1】:

我将以下评论作为我的答案:

我会在视图中创建一个属性 检查设置的模型和 而是暴露了适当的列表 而不是搞乱代码隐藏。 测试起来容易得多。 – 罗伯特 罗斯尼

【讨论】:

    【解决方案2】:

    您是否将 Combobox 的 DataContext 设置为 ItemList 的父对象? 所以comboBox.DataContext = MyObj; MyObj 上面有 ItemList 属性。

    【讨论】:

    • 是的,已经设置好了,抱歉,应该提到的。
    【解决方案3】:

    再次检查 DataContext 是否设置为具有 ItemList 属性的对象。 查看真正的 DataContext 的一个很好的方法是使用Snoop。 你的代码没有问题,Jast DataContext

    【讨论】:

      猜你喜欢
      • 2015-11-07
      • 2011-01-12
      • 1970-01-01
      • 2016-12-10
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      相关资源
      最近更新 更多