【问题标题】:Can I store an Object inside a button in C#我可以在 C# 中的按钮内存储对象吗
【发布时间】:2011-10-12 21:32:09
【问题描述】:

我在我的代码中动态创建按钮,有没有办法可以在我的按钮中存储一个自定义对象,以便在我按下此按钮时使用它?

【问题讨论】:

    标签: c# wpf object button


    【解决方案1】:

    可以为此使用Tag,但在获取对象时需要强制转换。

    【讨论】:

    • @HB:是的,但是 应该 OP 做什么 :-) 可以做到这一点,但使用这种方法会忽略 WPF(和最现代)广泛推荐的模式GUI 开发。
    • @EricJ.:我会推荐 commanding way 做事,我想,这不是一团糟。
    【解决方案2】:

    考虑使用命令模式并将命令绑​​定到按钮的Command property 并使用CommandParameter Property 来存储您的对象。

    单击按钮时,将使用CommandParameter(包含您的对象)作为参数调用命令的Execute 方法。

    很高兴知道您正在处理的场景。只要您不构建自定义控件,通过代码生成 XAML 就表明您可能走错了路。

    大多数事情都可以通过数据绑定和重复器控件来完成,例如列表框、菜单、数据网格等。您熟悉 MVVM 模式吗?

    【讨论】:

    • 我也在使用它,但我需要为每个按钮存储一个唯一的对象
    • @raym0nd:还有CommandParameter,你看。它可能正是针对该用例而存在的。
    • 为什么需要存储一个对象?如果您使用命令模式,您可以通过实现简单的ICommand 接口来创建自定义命令。此类可以包装所有需要的功能,并且可以使用您的对象进行初始化。
    • @Zebi:虽然提供一些外围建议可能是个好主意,但这几乎不应该成为您回答的重点(因为它是粗体的),但我建议您提及 CommandParameter在您的回答中,因为这实际上回答了如何在按钮中存储对象的问题。
    【解决方案3】:

    有很多选项可以以声明方式(通过绑定到 Tag 或其他未使用的字段)或不以声明方式执行此操作,但如果您动态创建按钮,一种不那么侵入性的方法是简单地创建一个 Dictionary<Button, T> 映射它存储每个按钮所需的对象。

    【讨论】:

    • 在这种情况下,您不妨创建一个基本上做同样事情的附加属性。
    • 这实际上比使用 Tag 或任何其他字段更好,因为使用它们是有限的,不是很多,但仍然。
    • 没错,标签有点混蛋,没有太多存在的理由。可能是为了方便? (我现在实际上添加了我的评论作为另一个答案:P)
    【解决方案4】:

    您也可以使用attached property

    【讨论】:

      【解决方案5】:

      你也可以继承 Button 并将你的类放在那里...

      【讨论】:

        猜你喜欢
        • 2014-11-16
        • 1970-01-01
        • 2010-12-29
        • 1970-01-01
        • 1970-01-01
        • 2011-07-21
        • 1970-01-01
        • 2015-02-23
        • 1970-01-01
        相关资源
        最近更新 更多