【问题标题】:MultiBinding to an ObservableCollection多绑定到 ObservableCollection
【发布时间】:2012-07-12 02:00:22
【问题描述】:

我正在使用 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的Color会同时自动变为ColorBox的SelectedColor?

如果我将 UserControl 的 DataContext 设置为任一 ShapeVM,则仅更改任一 ShapeVM 的颜色。

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

非常感谢。

【问题讨论】:

    标签: wpf binding observablecollection


    【解决方案1】:

    解决您的问题的另一个简单方法是

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

    我希望这篇文章会有所帮助。

    【讨论】:

    • 只能更新ComboBox中的一项(SelectedItem)?但是我想要的是在 ColorBox 中更改 SelectedColor 时更新 ComboBox 中的所有 ShapeVM。我怎么能这样做?谢谢。
    • 对不起,我误解了这个问题,我认为在您的 Color 属性集中,您可以使用循环将集合的所有颜色设置为值,或者您可以编写 Converter 但逻辑相同,所以它更好您在绑定到 SelectedColor 的 Color 属性的设置器中设置 selectedColor
    • 我已经更新了上述解决方案,但我使用 TextBox 和 PhoneNumber 而不是 ShapeVM 而不是 ColorBox 。但是逻辑是写在 SelectedItemName 属性的设置器中的那种。
    【解决方案2】:

    将 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, 绑定);

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

    【讨论】:

      猜你喜欢
      • 2012-10-23
      • 2011-04-10
      • 1970-01-01
      • 1970-01-01
      • 2013-04-24
      • 2016-09-13
      • 2013-09-07
      • 2013-10-14
      • 2019-02-24
      相关资源
      最近更新 更多