动态添加用户控件
Dynamically Add a User Control
我正在尝试通过按下按钮将用户控件动态添加到 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 值应该继承自 item 容器,一个应用 DataTemplate 的 ContentPresenter。继承的 DataContext 包含对 ItemsSource 集合的关联元素的引用。
当您显式分配 UserControl 的 DataContext 时,继承被破坏并且控件未绑定到 ItemsSource 集合元素。
我正在尝试通过按下按钮将用户控件动态添加到 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 值应该继承自 item 容器,一个应用 DataTemplate 的 ContentPresenter。继承的 DataContext 包含对 ItemsSource 集合的关联元素的引用。
当您显式分配 UserControl 的 DataContext 时,继承被破坏并且控件未绑定到 ItemsSource 集合元素。