我的 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
(启用和禁用)还是只有一个(切换)? int
至LimitTxt
,如果我将其设为空并禁用它会发生什么? DoStuff(Int32.Parse(LimitTxt.Text))
是一种干净的方法吗?当DoStuffBtn
被按下? LimitChk
上使用两个命令, CanExecute()
会发生什么ICommand
的功能这决定了 LimitChk
是否启用? 所以主要问题是:我描述的情况如何适合使用 WPF 中的命令的一个很好的模式?
我看过的关于 WPF、Commands 和 MVVM 的一些链接:
到目前为止我所理解的是,我必须尽可能地远离 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
给它。您可能想要添加 ExceptionValidationRule
到Binding
以便它突出显示无效输入。该按钮不是必需的,当
TextBox
时会自动完成解析。失去焦点(如果你使用默认的 UpdateSourceTrigger
)。如果要自定义解析方式,可以创建自定义转换器以在绑定(bind)中使用。
关于c# - 如何在这种特定的 WPF 情况下应用 MVVM 和命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2118632/