【问题标题】:WPF MVVM add item to combobox and change selecteditemWPF MVVM 将项目添加到组合框并更改选定项目
【发布时间】:2016-01-19 16:43:28
【问题描述】:

所以我有一个 WPF MVVM 应用程序。当我按下按钮时,我希望将一个新条目添加到组合框的下拉列表中,并将组合框的选定项目设置为该项目。我可以通过 ObservableCollection 将项目添加到下拉列表中,但我似乎无法正确绑定 SelectedItem。我试过了:

<ComboBox ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}" />

并将 SelectedItem 直接放在 ViewModel 中,在 ViewModel 中实现 INotifyPropertyChanged。但这不起作用。有什么想法吗?

编辑:我还应该补充一点,OnNotifyPropertyChange 事件在我期望的时候会正确触发,所以我不确定发生了什么。我也尝试使用UpdateSourceTrigger=PropertyChanged 无济于事。

【问题讨论】:

    标签: c# wpf mvvm combobox selecteditem


    【解决方案1】:

    只是一个小建议,以避免出现您将属性名称写错的情况。

    如果您使用的是 .net 4.5,则可以在您的 OnPropertyChanged-Method 中使用 CallerMemberName-Attribute。这看起来像:

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)

    那么你的财产看起来像

    public bool MyProperty
    {
       get{ return myProperty; }
       set
       {
          myProperty=value;
          OnPropertyChanged();
       }
    }
    

    您还可以编写一个方法,从 lambda 表达式中提取属性名。基类中的方法如下所示:

    public static class Helper
    {
       public static string GetPropertyName<T>(Expression<Func<T>> expression)
       {
          return ((MemberExpression)expression.Body).Member.Name;
       }
    }
    

    属性中的用法如下:

    public bool MyProperty
    {
       get{ return myProperty; }
       set
       {
          myProperty = value;
          OnPropertyChanged(Helper.GetPropertyName(() => MyProperty));
       }
    }
    

    通过这种方法,您可以在编译时检查您的属性名称。

    【讨论】:

      【解决方案2】:

      谢谢大家,我在 OnNotifyPropertyChanged 中的属性拼写错误...好伤心。

      【讨论】:

        【解决方案3】:

        你也可以使用

        OnPropertyChanged(nameof(MyProperty));
        

        避免拼写错误。

        我开始将FodyPropertyChanged 一起使用,它会自动注入 OnPropertyChanged 代码,从而为您节省一些打字工作,并使代码看起来干净整洁。

        【讨论】:

          猜你喜欢
          • 2011-03-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多