同时使用同一用户控件的多个实例

时间:2016-07-06 17:25:30

标签: c# wpf mvvm mvvm-light

我正在使用wpf和MVVM创建一个应用程序。我遇到了一个问题,其中一个控件同时使用另一个控件的三个副本。这三个都需要拥有自己的相关视图模型实例。目前我在用户控件的视图中有与视图模型相关的绑定,但是我没有在自己的xaml中设置控件的数据上下文。

我不记得我在哪里看过这个,但我最初的尝试是使用一个可观察的集合,如下所示: 在模型中:

private ObservableCollection<SignalStrengthViewModel> signalStrengths;

public GyroViewModel()
{
    this.signalStrengths = new ObservableCollection<SignalStrengthViewModel>();
    this.signalStrengths.Add(new SignalStrengthViewModel(Color.FromRgb(0, 128, 255)));
    this.signalStrengths.Add(new SignalStrengthViewModel(Color.FromRgb(63, 163, 153)));
    this.signalStrengths.Add(new SignalStrengthViewModel(Color.FromRgb(121, 132, 196)));

}

和包含控件的xaml:

<controls:SignalStrengthUserControl x:Name="Link1SignalStrengthControl" DataContext="{Binding SignalStrengths[0], Mode=OneWayToSource}"/>
<controls:SignalStrengthUserControl x:Name="Link2SignalStrengthControl" DataContext="{Binding SignalStrengths[1], Mode=OneWayToSource}"/>
<controls:SignalStrengthUserControl x:Name="Link3SignalStrengthControl" DataContext="{Binding SignalStrengths[2], Mode=OneWayToSource}"/>

这似乎并不实际将控件的实例与视图模型的实例绑定。我也尝试将列表移动到包含控件的xaml的代码中,但结果没有变化。

谁能告诉我我做错了什么?

我在这里和其他地方看到过使用文本框数据模板的问题,但我还没有找到一种方法可以在这里工作(而且它们都是用于文本框)。

我看过的其他一些问题:

A SIMPLE PATTERN FOR CREATING RE-USEABLE USERCONTROLS IN WPF / SILVERLIGHT Multiple instances of a wpf user control all use the same viewmodel

1 个答案:

答案 0 :(得分:3)

绑定中的Mode设置不正确,应为OneWayOneWayToSource用于从&#34; target&#34;移动数据。元素回到绑定的来源,几乎与你想要做的完全相反。

MSDN上可以找到有关每个BindingMode执行操作的详细信息。