【问题标题】:Best way to pass values in C#/XAML在 C#/XAML 中传递值的最佳方式
【发布时间】:2015-11-17 06:13:53
【问题描述】:

我刚刚开始使用 C#,希望您能帮助我选择传递值的最佳方式。我正在做一个在 Visual Studio 中构建计算器的练习。单击按钮后,我需要传递/获取值。

我可以看到一种(草率?)方法是为每个按钮的单击事件创建代码。这样做,我可以确定按下了哪个按钮......然后可以调用一个方法并将一个硬编码的参数传递给它,指示按钮的值。例如,按下一个按钮时的“BtnEntry_Click(1)”。

另一种方法是获取发送者的姓名,然后使用 switch 语句检查按钮的名称并分配值。例如:

    private void BtnEntry_Click(object sender, RoutedEventArgs e)
    {
        var buttonClicked = sender as Button;
        switch (buttonClicked.Name)
        {
            case "btnOne":
                // The one button was pressed, so pass 1
                break;

            case "btnTwo":
                //The two button was pressed, so pass 2
                break;

            //etc .....
        }
    }

第三种选择是将值放入按钮的标签属性中,然后从那里抓取它。

还有其他使用 RoutedEventArgs 的选项吗?如果可以,能否提供示例代码?

上述选项中有没有最好的方法...或者有更好的方法吗?

谢谢!

注意:一位编辑指出,这个问题与this question 上发布的问题有关。我觉得这是一个更广阔的视野,解决了更多潜在的解决方案,也更容易让像我这样的“菜鸟”理解。另一个问题是关于绑定代码的,这对我来说是一个无益的答案。

然而,我确实遇到了关于命令的this answer,它扩展了 Drew Noakes 和 kidsshaw 提供的想法。 (谢谢!)

因此,我建议将此问题作为一个单独的问题保留,因为它提供了比其他问题更容易的切入点,并且还提供了更多选项。

【问题讨论】:

  • 看看使用带有数字按钮的命令,并将值作为命令参数传递。有很多方法可以做你想做的事,但我可能会使用命令参数。
  • 根据我的回答,我同意 Drew。

标签: c# xaml


【解决方案1】:

在您提供的选项中,标签是我的首选。但由于这是 wpf,因此您可以实现一个 mvvm 解决方案,其中您有一个命令并向视图模型提供一个参数。

通常,mvvm 的开销可能会阻碍其在小型应用程序(例如计算器)中的使用。但由于您是新手并正在寻找选择 - 值得从小处学习它。

【讨论】:

  • 谢谢!你能告诉我为什么你不喜欢 tag 属性吗?
  • 我认为这与另一个答案有关。标签是一个字符串值,对于您的目的来说应该没问题。您是计算器上的按钮模拟键,具有值或运算符,所有这些都具有字符表示。 mvvm 策略将允许您针对底层逻辑编写单元测试,甚至无需创建 UI。正如我所说,完美的教程项目。
【解决方案2】:

我不是Tag 属性的粉丝,因为它没有被输入。您可能会考虑让一个类继承自 Button,并让该类实现一个公开其基础数值的属性。

【讨论】:

    猜你喜欢
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多