0

我有一个用户控件 ( AddNewProductRowView),它有一些基本元素,如文本框下拉列表等。我将 UserControl 与 ViewModel - 绑定AddNewProductRowViewModel。然后我有一个 MainWindow,它有一个 ListBox,它的 itemsource 是上面提到的 userControl ( AddNewProductRowViewModelList) 的 List。MainWindow 绑定到 DataModel - AddNewProductViewModel。AddNewProductViewModel 包含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"));
                }
            };
        }

ProductNo是绑定到 userControl in 的属性之一AddNewProductRowViewModel。两种模型都实现了INotifyPropertyChanged. 控件按预期呈现,当我更改 Product No 的文本框时,OnPropertyChanged对于 Child,即在AddNewProductRowViewModelfires 中,但同样没有被困在 Parent ViewModel 中。

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

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

提前致谢。

编辑 然后我根据 - Kent Boogaart 的回答编辑了代码

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,因此我丢失了我在父级中附加的绑定。

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

感谢所有感兴趣的人。

结案!

4

0 回答 0