gpt4 book ai didi

c# - 更新绑定(bind)源后如何执行 ICommand?

转载 作者:太空宇宙 更新时间:2023-11-03 21:57:27 26 4
gpt4 key购买 nike

假设我有一个 WPF TextBox:

<TextBox Text="{Binding Foo}" />

在属性 FooTextBox 更新后,是否有办法执行一些 ICommand(即由 TextBox 而不是其他控件或代码)?

我不想使用绑定(bind)的 SourceUpdated 事件,因为我想避免“代码隐藏”。

最佳答案

您是否意识到如果您最终留下了一些代码,MVVM 警察不会来抓您?使用事件命令等本质上只是在 XAML 中编码,而不是在 C# 中编码。无论哪种方式,您都需要将事件与命令 Hook ,因为控件不会为您所追求的内容公开命令。

我想这就是你想要的,如果我走错了路请告诉我:

您想知道对 Foo 的更新何时来自文本框并且仅来自文本框。即,如果对 Foo 的更新来自某些您不希望命令运行的代码,对吗?

如果是:

        <TextBox Name="Fred" Text="{Binding Foo, NotifyOnSourceUpdated=True}" SourceUpdated="Fred_SourceUpdated"/>

那么在“邪恶”的代码背后有:

private void Fred_SourceUpdated(object sender, DataTransferEventArgs e)
{

}

在该方法中,您可以将 View 的数据上下文转换为 View 模型并调用您想要的任何命令。如果其他东西更新了 Foo,则不会调用源更新事件。

如果您真的不想像您在 OP 中提到的那样隐藏代码,那么您可以执行附加行为,但这对于“无意义”的要求来说太过分了。您的逻辑取决于更改是否来自文本框这一事实意味着您的 View 已经不仅仅是一个 View 。这种方法仍然允许您让您的命令代码在您的 VM 中完全可测试。

第二次编辑

您还可以查看通过事件命令而不是文本更改在 XAML 中使用源更新事件

关于c# - 更新绑定(bind)源后如何执行 ICommand?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11660123/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com