【问题标题】:Polymorphism in binding?绑定中的多态性?
【发布时间】:2014-03-30 20:18:03
【问题描述】:

我有一个 POCO 对象(有很多公共字段的公共类)。

public class Poco
{
    public string name1;
    public string name2;
    public bool isName1Used;
}

现在我需要渲染一个对象名称列表,但有一个条件:根据布尔值,应该使用 name1 或 name2。所以,我创建了继承类并在那里添加了一些功能

public class Item : Poco
{
    public string Name
    {
        get { return isName1Used ? name1 : name2; }
    }

我现在如何对绑定引擎说它应该绑定到名称?

<TextBlock Text="{Binding Name}"/>

它说,在 Poco 中找不到 Name(很公平,因为引擎不知道它可以将 Poco 变形为 Item)。

【问题讨论】:

    标签: c# windows-phone-7 data-binding polymorphism


    【解决方案1】:

    好吧,您必须将 Item 而不是 Poco 元素绑定到视图。多态性并不是隐含的,因为您创建了一个继承的类,您需要实际构造该类的实例并绑定它们

    var pocos = new List<Poco>();
    var items = pocos.Select(i=>new Item
                             {
                                name1 = i.name1,
                                name2 = i.name2,
                                isName1Used = i.isName1Used
                             });
    

    【讨论】:

    • 嗯.. 也许我应该为 Item 创建一个构造函数? Kinda Item(Poco poco) {name1 = poco.name1; *** }。但它看起来像作弊:) 我更喜欢一种方法来告诉绑定引擎 Poco 是 Item 的基础。
    • 您可以简化事情。我只是陈述了这个概念。
    • 嗯.. 也许转换器可以提供帮助?它需要 Poco 并返回 Item。会慢很多吗?
    • 慢一点?你确实有一个四核 GHz 处理器来执行一些 ifs,我相信它可以处理它。
    • 我有一个旧的好 Lumia 800,应该可以处理它。我的意思是,从您的角度来看,使用 Converter 是否有意义?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2017-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多