如何使用MVVM数据绑定WPF更新多个用户控件实例?
我创建了一个带有如何使用MVVM数据绑定WPF更新多个用户控件实例?,wpf,mvvm,wpf-controls,Wpf,Mvvm,Wpf Controls,我创建了一个带有ProgressBar和标签的UserControl <Label Content="{Binding ElementName=UserControl, Path=StatusProperty}" Grid.Row="1" Height="28" HorizontalAlignment="Left" Margin="76,0,0,32" Name="lblStatus" VerticalAlignment="Bottom" Grid.RowSpan="2" /> &l
ProgressBar
和标签的UserControl
<Label Content="{Binding ElementName=UserControl, Path=StatusProperty}" Grid.Row="1" Height="28" HorizontalAlignment="Left" Margin="76,0,0,32" Name="lblStatus" VerticalAlignment="Bottom" Grid.RowSpan="2" />
<ProgressBar Grid.Row="2" Height="20" HorizontalAlignment="Left" Margin="12,3,0,0" Name="pbCheckProgress" Style="{DynamicResource ProgressBarStyle}" Maximum="{Binding ElementName=UserControl, Path=MaximumProperty}" Minimum="{Binding ElementName=UserControl, Path=MinimumProperty}" Value="{Binding ElementName=UserControl, Path=ValueProperty}" VerticalAlignment="Top" Width="156" />
现在,我想在同一页面中创建此UserControl
的多个实例,并使用MVVM从代码隐藏更新ProgressBar
。但我想不出来。我是否需要为UserControl
创建一个ViewModel,以便每个实例都有自己的ViewModel副本
是否有方法更新页面视图模型中的所有实例
谢谢和问候,
Bharat如果我理解正确,听起来您希望为此UserControl
创建一个ViewModel,然后拥有该ViewModel的多个实例(视图上的UserControl
的每个实例一个)。如果您有一个绑定了多个UserControls
的ViewModel,那么它们将显示完全相同的内容
听起来您已经有了页面的ViewModel,因此您可以简单地将UserControl
的ViewModel添加为页面ViewModel的属性,如下所示:
public class PageViewModel : INotifyPropertyChanged
{
private UCViewModel _ucViewModel;
//Other ViewModel Code
public UCViewModel UserControlViewModel
{
get { return _ucViewModel; }
}
}
<local:myControl Status="{Binding UserControlViewModel.Status}"... />
其中,UCViewModel是用户控件的ViewModel。然后,在XAML中,只需绑定到UCViewModel上的属性,如下所示:
public class PageViewModel : INotifyPropertyChanged
{
private UCViewModel _ucViewModel;
//Other ViewModel Code
public UCViewModel UserControlViewModel
{
get { return _ucViewModel; }
}
}
<local:myControl Status="{Binding UserControlViewModel.Status}"... />
如果您有一个UCViewModels集合,您需要以稍微不同的方式处理它,但概念仍然是一样的。谢谢您的回答。这正是我想做的。我有并行运行的任务,并试图通过用户控制显示每个任务的进度(UC包含标签和进度条)。我将尝试您的解决方案,然后将其更新为解决方案。ElementName应指向x:Name属性值,而不是元素类型(UserControl、TextBox等)