我有一个用户控件(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"));
}
};
}
此处ProductNo
是AddNewProductRowViewModel
中绑定到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 !!