我正在使用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
答案 0 :(得分:3)
绑定中的Mode
设置不正确,应为OneWay
。 OneWayToSource
用于从&#34; target&#34;移动数据。元素回到绑定的来源,几乎与你想要做的完全相反。
MSDN上可以找到有关每个BindingMode
执行操作的详细信息。