c# - 如何在这种特定的 WPF 情况下应用 MVVM 和命令?

标签 c# wpf mvvm routed-commands

我的 WPF 应用程序中的 MVVM 模式和命令有问题。问题不在于 MVVM 模式,而在于我的 GUI 上正在发生的事情。我解释一下情况:

我的应用程序可以 DoStuff 到某些文件。我有一个带有函数 DoStuff(int limit) 的类.我的用户用户界面有以下项目:

  • 一个 Button DoStuffBtn开始解析。
  • 一个 TextBox LimitTxt填写限额。
  • 一个 CheckBox LimitChk启用或禁用限制。

  • 当您“取消选中”LimitChk ,然后 LimitTxt.Text = ""LimitTxt.IsEnabled = false .当你“检查”LimitChk ,然后 LimitTxt.IsEnabled = false再次,但文本保持为空,直到您填写一些内容。

    我已经阅读了许多关于 WPF 和 MVVM 中的命令的教程,但我似乎无法将我的案例倒入那个模型中。我给出的示例实际上只是我 UI 的一小部分,但我似乎也不能很好地做到这一点。

    我不断遇到以下问题:
  • 我需要两个Commands对于 LimitChk (启用和禁用)还是只有一个(切换)?
  • 如果我绑定(bind) intLimitTxt ,如果我将其设为空并禁用它会发生什么?
  • 使用 DoStuff(Int32.Parse(LimitTxt.Text)) 是一种干净的方法吗?当DoStuffBtn被按下?
  • 如果我在 LimitChk 上使用两个命令, CanExecute() 会发生什么ICommand的功能这决定了 LimitChk是否启用?

  • 所以主要问题是:我描述的情况如何适合使用 WPF 中的命令的一个很好的模式?

    我看过的关于 WPF、Commands 和 MVVM 的一些链接:
  • http://www.devx.com/DevX/Article/37893/0/page/1
  • http://msdn.microsoft.com/en-us/magazine/cc785480.aspx?pr=blog
  • http://jmorrill.hjtcentral.com/Home/tabid/428/EntryId/432/MVVM-for-Tarded-Folks-Like-Me-or-MVVM-and-What-it-Means-to-Me.aspx
  • http://msdn.microsoft.com/en-us/magazine/dd419663.aspx


  • 到目前为止我所理解的是,我必须尽可能地远离 UI。甚至像 UI 这样的东西也会影响 UI。 IE。取消选中 LimitChk禁用 LimitText .尽管如此,我认为我应该在与 UI 相关的信息和操作以及实际上与必须完成的实际工作有关的内容之间保持区别。

    最佳答案

    我认为您感到困惑……您在这里不需要任何命令,只需使用绑定(bind)即可。

    • Do I need two Commands for LimitChk (enable and disable) or just one (toggle)?


    你不需要。只需创建一个 LimitEnabled属性,并绑定(bind) CheckBox给它(IsChecked="{Binding LimitEnabled}")

    • If I bind an int to LimitTxt, what happens if I make it empty and disable it?


    禁用它没有任何效果。如果您制作 TextBox空,绑定(bind)将失败,因为空字符串无法转换为 int(至少不能使用默认转换器)

    • Is it a clean way to just use Parse(Int32.Parse(LimitTxt.Text)) when ParseBtn is pressed?


    你不需要。只需创建一个 Limit属性,并绑定(bind) TextBox给它。您可能想要添加 ExceptionValidationRuleBinding以便它突出显示无效输入。

    该按钮不是必需的,当 TextBox 时会自动完成解析。失去焦点(如果你使用默认的 UpdateSourceTrigger )。如果要自定义解析方式,可以创建自定义转换器以在绑定(bind)中使用。

    关于c# - 如何在这种特定的 WPF 情况下应用 MVVM 和命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2118632/

    相关文章:

    c# - 在 Xaml 中声明元组

    wpf - 通过 MVVM RelayCommand 从 ListBox 中删除 SelectedItems

    c# - 使用 jQuery ajax 加载母版页后,带有更新面板的 aspx 页面无法正常工作

    c# - 如何在 C# 中编写 XML?

    WPF 编码的 UI 测试 : Encrypting password read from datasource

    c# - 通过 Teamviewer 连接时 WPF 应用程序崩溃

    c# - 在 mvvm 中选择的列表框第一项

    c# - WPF - ListView 的 ItemsSource 中的绑定(bind)不能是列表

    c# - 这里的每个人都在跳上 ORM 潮流吗?

    c# - 如何中止使用 ThreadPool.QueueUserWorkItem 创建的线程