【问题标题】:Silverlight: binding an observable collection to different usercontrols conditionallySilverlight:有条件地将可观察集合绑定到不同的用户控件
【发布时间】:2011-04-25 17:58:02
【问题描述】:

我是 Silverlight 4 的新手,由于我对所涉及的术语不是很熟悉,因此很难在谷歌上搜索它。有人能指出我正确的方向吗?

我有一个要在 ItemsControl 列表中表示的可观察集合。集合的类型是一个类——为简单起见——我们称之为PersonInfo。每个 PersonInfo 都有一个字符串属性 Name 和一个可观察的集合 PhoneNumbers。当我告诉 ItemsControl 的 DataTemplate 使用“UserControl1”来可视化数据时,一切正常 - 绑定工作。

我的问题是——对于这个理论示例——我想将用于显示 PersonInfo 的控件基于 Name 属性中的某些值。所以我想对任何名为“Joe”的条目使用 UserControl1,而对所有其他条目使用 UserControl2。我找到了 IValueConverter 的东西,但这似乎无助于选择用于可视化数据的控件类型。

旁注: UserControl1 和 UserControl2 以类似的方式显示数据,但在它们复杂的网格布局中存在一些差异,这迫使我创建了 2 个单独的用户控件。如果有人知道我如何将多个布局构建到 UserControl1 的 xaml 中,然后在运行时通过属性绑定在它们之间切换,那可能会让我完全回避这个问题......

谁能推荐一个解决这个问题任一方面的通用策略?

提前致谢!

【问题讨论】:

    标签: silverlight data-binding user-controls


    【解决方案1】:

    我通过使用IValueConverter 以一种不同寻常的方式解决了类似的困境:我创建了一个“VisibilityConverter”来告诉控件它是否应该出现。在您的示例中,您将拥有其中两个:一个 Convert 方法将

    return ((PersonInfo)o).Name == "Joe" ? Visibility.Visible : Visibility.Collapsed;
    

    而另一个则相反。然后将UserControl1 的可见性绑定到一个VisibilityConverter 并将UserControl2 的可见性绑定到另一个和violà,它们会根据数据进行交换。

    【讨论】:

    • 感谢您的回复!有趣的是你也得出了这个结论。在发布这个问题之前,我最终走上了这条路——我认为必须有一个解决方案让我以更简单的方式交换这些东西。我使用了一个接受绑定参数的 valueconverter 来了解哪个控件调用了它,但我更喜欢你的单独验证器方法。很高兴知道我并没有完全脱离基地!再次感谢
    猜你喜欢
    • 2011-11-16
    • 1970-01-01
    • 2010-11-18
    • 2016-12-19
    • 1970-01-01
    • 2011-01-02
    • 2020-06-05
    • 1970-01-01
    • 2017-09-28
    相关资源
    最近更新 更多