我正在使用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。我怎么能这样做?
非常感谢。
答案 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:
对于您实例化的每个ShapeVM,在代码隐藏中创建一个绑定:
绑定绑定= new Binding(); inding.source = TheColorBox; binding.Path = new PropertyPath(ColorBox.SelectedColorProperty); shapeVM.SetBinding(ShapeVM.ColorProperty,binding);
(由于某种原因,代码标记不起作用,抱歉)