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 の色が自動的に ColorBox の SelectedColor に同時に変更される可能性はありますか?

UserControl の DataContext をいずれか 1 つの ShapeVM に設定すると、いずれか 1 つの ShapeVM の色だけが変更されます。

ただし、ColorBox の SelectedColor を変更すると同時に 5 つの ShapeVM を変更したいと考えています。どうすればそうできますか?

どうもありがとうございました。

4

2 に答える 2

0

VMのColorプロパティをColorBoxにバインドします。

  1. DependencyObjectからShapeVMを派生させる
  2. Colorを依存関係プロパティとします
  3. ColorBoxに名前を付けます(x:Name = "TheColorBox")
  4. インスタンス化するすべてのShapeVMについて、コードビハインドでバインディングを作成します。

    バインディングバインディング=newBinding(); inding.source = TheColorBox; binding.Path = new PropertyPath(ColorBox.SelectedColorProperty); shapeVM.SetBinding(ShapeVM.ColorProperty、binding);

(何らかの理由でコードマークアップが機能しません、申し訳ありません)

于 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 に答える