0

我正在使用 wpf 并多重绑定到 ViewModel 列表。

假设我有一个相同类型的 ViewModel 的 ObservableCollection,如下所示:

代码:

public class ShapeVM
{

    public Color Color { get; set; }
    public string Name { get; set; }

}


ObservableCollection ShapeVMs = new ObservableCollection();
ShapeVMs.Add(...);
ShapeVMs.Add(...);
ShapeVMs.Add(...);
ShapeVMs.Add(...);
ShapeVMs.Add(...);
// There are 5 ShapeVM in the collection.

看法:

<UserControl .........>

    <ColorBox SelectedColor="{Binding Path=Color, Mode=TwoWay}" />

</UserControl>

是否有可能每当 ColorBox 的 SelectedColor 发生变化时,5 个 ShapeVM 的 Color 会同时自动变为 ColorBox 的 SelectedColor?

如果我将 UserControl 的 DataContext 设置为任一 ShapeVM,则只会更改任一 ShapeVM 的颜色。

但是,我想在 ColorBox 的 SelectedColor 更改的同时更改 5 个 ShapeVM。我怎么能这样做?

非常感谢。

4

2 回答 2

0

Bind the VM's Color property to your ColorBox:

  1. Derive ShapeVM from DependencyObject
  2. Let Color be a dependency property
  3. Give ColorBox a name (x:Name="TheColorBox")
  4. For every ShapeVM you instantiate, create a binding in code-behind:

    Binding binding = new Binding(); inding.source = TheColorBox; binding.Path = new PropertyPath(ColorBox.SelectedColorProperty); shapeVM.SetBinding(ShapeVM.ColorProperty, binding);

(for some reason code markup doesn't work, sorry)

于 2012-07-12T08:50:11.573 回答
0

您的问题的另一个简单解决方案是

<ComboBox x:Name="cmb" Grid.Row="0" ItemsSource="{Binding ShapeVMs}" DisplayMemberPath="Color" Height="40" SelectedValue="{Binding Path=SelectedColor,ElementName=clrbox}" SelectedValuePath="Color"/>
    <ColorBox x:Name="clrbox"/>

我希望这个会有所帮助。

于 2012-07-12T03:56:08.787 回答