2012-07-12 51 views
0

我正在使用wpf和multibinding查看ViewModel的列表。MultiBinding to ObservableCollection

假设我有同样的视图模型的一个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> 

难道每当彩盒的SelectedColor改变时,5个ShapeVM的颜色会自动更改为ColorBox的SelectedColor?

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

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

非常感谢。

回答

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"/> 

我希望这一次会有所帮助。

+0

它只能在ComboBox更新一个项目(的SelectedItem)?但是我想要的只是在ColorBox中更改SelectedColor时更新ComboBox中的所有ShapeVM。我怎么能这样做?谢谢。 – user1184598 2012-07-12 04:29:50

+0

对不起,我误解了这个问题,我认为在Color属性的设置中,你可以使用循环将你的集合的所有颜色设置为值,或者你可以编写Converter,但是逻辑相同,所以最好在setter中设置selectedColor你的颜色属性,你绑定到SelectedColor – ethicallogics 2012-07-12 04:38:28

+1

我已经更新了上述解决方案,而不是ColorBox我已经使用TextBox和PhoneNumber而不是ShapeVM。但是逻辑是在SelectedItemName属性的setter中编写的。 – ethicallogics 2012-07-12 04:44:49

0

绑定虚拟机的颜色属性为您的彩盒:

  1. 派生ShapeVM自DependencyObject
  2. 设色是一个依赖属性
  3. 给彩盒名称(X:NAME = “TheColorBox”)
  4. 对于您实例化的每个ShapeVM,在代码隐藏中创建绑定:

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

(出于某种原因代码标记不工作,对不起)