我有一个用户控件 ( 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,即在AddNewProductRowViewModel
fires 中,但同样没有被困在 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
,因此我丢失了我在父级中附加的绑定。
我的坏...我希望这个问题可以帮助某人清除他/她的概念。
感谢所有感兴趣的人。
结案!