MultiBinding到ObservableCollection

时间:2012-07-12 02:00:23

标签: wpf binding observablecollection

我正在使用wpf和multibinding到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的颜色会同时自动更改为ColorBox的SelectedColor吗?

如果我将UserControl的DataContext设置为一个ShapeVM,那么只有一个ShapeVM的颜色会被更改。

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

非常感谢。

2 个答案:

答案 0 :(得分: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"/>

我希望这个会有所帮助。

答案 1 :(得分:0)

将VM的Color属性绑定到ColorBox:

  1. 从DependencyObject派生ShapeVM
  2. 让Color成为依赖属性
  3. 为ColorBox命名(x:Name =“TheColorBox”)
  4. 对于您实例化的每个ShapeVM,在代码隐藏中创建一个绑定:

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

  5. (由于某种原因,代码标记不起作用,抱歉)