我试图添加用户控件到ItemsControl动态按下一个按钮。用户控件有一个与之关联的视图模型。UI正在使用视图模型实例化的值进行更新。
我的属性定义如下:
private ObservableCollection<StageControlViewModel> _stages = new ObservableCollection<StageControlViewModel>();
public ObservableCollection<StageControlViewModel> Stages
{
get => _stages;
set => SetProperty(ref _stages, value);
}
我在xaml中设置了以下绑定:
<ItemsControl ItemsSource="{Binding Stages}">
<ItemsControl.ItemTemplate>
<DataTemplate DataType="{x:Type viewModels:StageControlViewModel}">
<views:StageControl/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
我添加了这个函数:
private void AddStage()
{
StageControlViewModel viewModel = new StageControlViewModel
{
Name = ("Stage " + (_stages.Count + 1)),
TimeToNextStage = 106
};
Stages.Add(viewModel);
}
使用以下代码设置用户控件的绑定:
<UserControl.DataContext>
<viewModels:StageControlViewModel/>
</UserControl.DataContext>
视图模型继承自ObservableObject。
现在的问题是,当我添加控件的值绑定不工作。IE - Name和TimeToNextStage没有更新UI。不知道我在这里做错了什么,希望能得到帮助。提前谢谢。
从UserControl的XAML中删除DataContext赋值:
<UserControl.DataContext>
<viewModels:StageControlViewModel/>
</UserControl.DataContext>
<ItemsControl.ItemTemplate>
<DataTemplate>
<views:StageControl/>
</DataTemplate>
</ItemsControl.ItemTemplate>
StageControl的DataContext值应该继承自项容器,一个应用DataTemplate的ContentPresenter。继承的DataContext保存对ItemsSource集合的关联元素的引用。
当你显式地为UserControl的DataContext赋值时,继承就被破坏了,控件不会绑定到ItemsSource集合元素。