WPF - 从子ViewModel冒泡到Parent View Model的事件

时间:2013-10-02 13:21:00

标签: wpf event-bubbling

我有一个用户控件(AddNewProductRowView),它有一些基本元素,如文本框下拉等。我将UserControl与ViewModel绑定 - AddNewProductRowViewModel。然后我有一个MainWindow,它有一个ListBox,其itemsource是上面提到的userControl(AddNewProductRowViewModelList)的List。 MainWindow绑定到DataModel - AddNewProductViewModel。 AddNewProductViewModel包含我动态添加用户控件的Property AddNewProductRowViewModelList。我还将属性更改事件连接为 -

AddNewProductRowViewModelList = new ObservableCollection<AddNewProductRowViewModel>();
        AddNewProductRowViewModel objAddNewProductRowViewModel;
        for (int row = 1; row <= 5; row++)
        {
            objAddNewProductRowViewModel = new AddNewProductRowViewModel();
            AddNewProductRowViewModelList.Add(objAddNewProductRowViewModel);
            objAddNewProductRowViewModel.PropertyChanged += delegate(object sender, PropertyChangedEventArgs e)
            {
                if (string.Equals("ProductNo", e.PropertyName, StringComparison.Ordinal))
                {
                    this.OnPropertyChanged(new PropertyChangedEventArgs("ProductNo"));
                }
            };
        }

此处ProductNoAddNewProductRowViewModel中绑定到userControl的属性之一。两个模型都实现了INotifyPropertyChanged。 Control按预期呈现,当我更改产品号的textBox时,OnPropertyChanged为Child,即在AddNewProductRowViewModel触发,但同样不会被困在Parent ViewModel中。

请告知我做错了什么。事实上,我为DropDownList做了同样的事情 - 对于State状态列表,并以完全相同的方式连接事件。这很好...... :(。

我在这里看到的唯一区别是现在我正在使用用户控件。

提前致谢。

修改 然后,我按照Kent Boogaart's answer

编辑了代码
AddNewProductRowViewModelList = new ItemObservableCollection<AddNewProductRowViewModel>();
 AddNewProductRowViewModelList.CollectionChanged += OnAddNewProductViewModelListChanged;

 AddNewProductRowViewModel objAddNewProductRowViewModel;
 for (int row = 1; row <= 5; row++)
 {
    objAddNewProductRowViewModel = new AddNewProductRowViewModel();
    AddNewProductRowViewModelList.Add(objAddNewProductRowViewModel);
 }
 AddNewProductRowViewModelList.ItemPropertyChanged += OnAddNewProductRowViewModelItemChanged;

添加了这两种方法 -

void OnAddNewProductViewModelListChanged(object sender, NotifyCollectionChangedEventArgs e)
 {

 }

 void OnAddNewProductRowViewModelItemChanged(object sender, EventArgs e)
 {

 }

当我添加项目时调用第一个...当我更新ProductNo时,第二个不是。

解决方案:经过这么多打击我的脑袋......我意识到了这一点......

AddNewProductRowView类中,在构造函数内...

public partial class AddNewProductRowView : UserControl
    {
        public AddNewProductRowViewModel ViewModel { get; private set; }

        public AddNewProductRowView()
        {
            InitializeComponent();
            ViewModel = new AddNewProductRowViewModel();
            DataContext = ViewModel;
        }
    }

现在..我正在为DataContext分配一个新的ViewModel,因此我丢失了我在父母中附加的绑定。

我的坏......我希望这个问题有助于某人清除他/她的概念。

感谢所有感兴趣的人。

CASE CLOSED !!

0 个答案:

没有答案