0

UserControl用 aProgressBar和 a 创建了 a Label

<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" />

然后我创建了以下内容DependencyProperties

// Dependency Properties for labels
public static readonly DependencyProperty StatusProperty = DependencyProperty.Register("Status", typeof(string), typeof(UserControl1), new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

// Dependency Properties for progress bar properties
public static readonly DependencyProperty MinimumProperty = DependencyProperty.Register("Minimum", typeof(double), typeof(UserControl1), new FrameworkPropertyMetadata(0.0d, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

public static readonly DependencyProperty MaximumProperty = DependencyProperty.Register("Maximum", typeof(double), typeof(UserControl1), new FrameworkPropertyMetadata(0.0d, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(double), typeof(UserControl1), new FrameworkPropertyMetadata(0.0d, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

现在我想UserControl在同一页面中创建这个的多个实例,并ProgressBar使用 MVVM 更新后面的代码。但我无法弄清楚这一点。我是否需要有一个 ViewModel,UserControl以便每个实例都有自己的 ViewModel 副本。

有没有办法从页面 ViewModel 更新所有实例?

谢谢和问候, 巴拉特

4

1 回答 1

1

如果我理解正确,听起来您想为此创建一个 ViewModel UserControl,然后拥有该 ViewModel 的多个实例(视图UserControl上的每个实例一个)。如果你有一个 ViewModelUserControls绑定了多个,它们都会显示完全相同的东西。

听起来您已经有了 Page 的 ViewModel,因此您可以简单地将 ViewModel 添加为UserControlPage ViewModel 的属性,如下所示:

public class PageViewModel : INotifyPropertyChanged
{
    private UCViewModel _ucViewModel;

    //Other ViewModel Code

    public UCViewModel UserControlViewModel
    {
        get { return _ucViewModel; }
    }
}

其中 UCViewModel 是您的UserControl. 然后,在您的 XAML 中,您只需绑定到 UCViewModel 上的属性,如下所示:

<local:myControl Status="{Binding UserControlViewModel.Status}"... />

如果你有一个 UCViewModel 的集合,你需要稍微不同地处理它,但概念还是一样的。

于 2013-03-06T19:59:06.607 回答