2012-07-12 83 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);

(出於某種原因代碼標記不工作,對不起)