【问题标题】:Strange behavior binding WPF combobox奇怪的行为绑定 WPF 组合框
【发布时间】:2012-12-25 00:36:13
【问题描述】:

我无法绑定到组合框的文本属性。在我在组合框中选择某些内容之前,它似乎不会绑定。然后就可以正常使用了。

这是直接来自测试应用的代码:

查看

<ComboBox ItemsSource="{Binding ListItems}"
          Text="{Binding Test}" />

视图模型

class ViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    public ObservableCollection<string> ListItems { get; set; }
    public ViewModel()
    {
        ListItems = new ObservableCollection<string>();
        ListItems.Add("Southwest");
        ListItems.Add("South");
    }

    public string Test
    {
        get { return "South"; }
        set { PropertyChanged(this, new PropertyChangedEventArgs("Test")); }
    }
}

但是,当我颠倒可观察集合项的顺序时,一切正常。

ListItems.Add("South");
ListItems.Add("Southwest");

这是怎么回事?

【问题讨论】:

  • 我认为你应该使用 SelectedItem 属性而不是 Text
  • 它应该可以与任何一个一起使用。就像我展示的那样,如果你颠倒集合中字符串的顺序,它就可以工作。我只是不明白为什么。
  • 就像 hameleon86 所说,您不应该绑定到 Text。在像 ComboBox(或 ListBox、ListView 等)这样的控件上绑定时,您应该只绑定到 SelectedItem 或 SelectedValue 以修改所选内容。
  • 我的立场是正确的,我认为 WPF 组合框像 windows.forms 组合框一样工作,它允许这种类型的行为。 msdn.microsoft.com/en-us/library/… 。奇怪的是我以前从未见过这种情况。我有十几个像这样绑定的组合框,它们都可以正常工作。

标签: c# wpf binding


【解决方案1】:

text 属性不能这样工作。 阅读这份文件: http://msdn.microsoft.com/en-us/library/system.windows.controls.combobox.text.aspx

就像 hameleon86 建议的那样,使用 selecteditem 代替。

如果你颠倒你的集合的顺序,我认为它可以工作,可能是因为 Text 属性默认采用集合的第一项

【讨论】:

    【解决方案2】:

    我想你可能想这样做:

    PropertyChanged(this, new PropertyChangedEventArgs("ListItems"));

    插入元素后。

    【讨论】:

    • 我会试试的。我认为这就是 ObservableCollection 应该做的。
    • 没有变化,还有其他想法吗?
    • 我不明白为什么我需要创建一个新集合?
    • 此评论为 CeD 的回答:)
    • @hameleon86 引发此事件是为了让 UI 端强制刷新。
    猜你喜欢
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 2012-03-15
    • 1970-01-01
    相关资源
    最近更新 更多