首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >更改ComboBox项源并使用CollectionChanged更新通知

更改ComboBox项源并使用CollectionChanged更新通知
EN

Stack Overflow用户
提问于 2018-07-14 08:48:08
回答 1查看 648关注 0票数 0

我有一个ComboBox cbo1

我试图使用ViewModelCollectionChanged来更改项源,但是ComboBox项仍然是空白的,不会更新。

我在这里尝试过几个例子和解决方案,但不知道如何正确地实现它们。

XAML

代码语言:javascript
运行
复制
<ComboBox x:Name="cbo1" 
          ItemsSource="{Binding cbo1_Items, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
          SelectedItem="{Binding cbo1_SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
          HorizontalAlignment="Left" 
          Margin="0,0,0,0"
          VerticalAlignment="Top"
          Width="105" 
          Height="22" />

ViewModelBase类

绑定ComboBox项

代码语言:javascript
运行
复制
public class ViewModelBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected void Notify(string propName)
    {
        if (this.PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propName));
        }
    }

    public ViewModelBase()
    {
        _cbo1_Items = new ObservableCollection<string>();
        _cbo1_Items.CollectionChanged += cbo1_Items_CollectionChanged;
    }

    // Notify Collection Changed
    //
    public void cbo1_Items_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
    {
        Notify("cbo1_Items");
    }


    // Item Source
    //
    public static ObservableCollection<string> _cbo1_Items = new ObservableCollection<string>();
    public static ObservableCollection<string> cbo1_Items
    {
        get { return _cbo1_Items; }
        set { _cbo1_Items = value; }
    }

    // Selected Item
    //
    public static string cbo1_SelectedItem { get; set; }

}

示例类

在这个类中,我希望更改ComboBox项源。

代码语言:javascript
运行
复制
// Change ViewModel Item Source
//
ViewModelBase._cbo1_Items = new ObservableCollection<string>()
{
    "Item 1",
    "Item 2",
    "Item 3"
};

// ...

// Change Item Source Again
//
ViewModelBase._cbo1_Items = new ObservableCollection<string>()
{
    "Item 4",
    "Item 5",
    "Item 6"
};
EN

回答 1

Stack Overflow用户

发布于 2018-07-14 10:39:58

在属性声明中实现- RaisePropertyChanged("ComboBoxItemsource");/NotifyPropertyChanged("ComboBoxItemsource")。例:-

观照

代码语言:javascript
运行
复制
<ComboBox Width="40" Height="40" ItemsSource="{Binding ComboBoxItemsource, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

在视图模型中-

代码语言:javascript
运行
复制
private ObservableCollection<string> comboBoxItemsource;
 public ObservableCollection<string> ComboBoxItemsource
        {
            get { return comboBoxItemsource; }
            set
            {
                if (comboBoxItemsource != value)
                {
                    comboBoxItemsource = value; 
                    RaisePropertyChanged("ComboBoxItemsource");
                }
            }
        }

    In Class Constructor-

public ClassViewModel()
        {
            ComboBoxItemsource = new ObservableCollection<string>();
            ComboBoxItemsource.Add("Item1");
            ComboBoxItemsource.Add("Item2");
           ....
       }

    //Event on which you want to change the collection

    public void OnClickEvent()
    {
                ComboBoxItemsource = new ObservableCollection<string>();
                ComboBoxItemsource.Add("Item5");
                ComboBoxItemsource.Add("Item6");
    }

类应该继承和实现INotifyPropertyChanged。希望这有帮助..。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51336841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档