gpt4 book ai didi

WPF:特定控件/ View / View 模型上的 LostFocus 事件

转载 作者:行者123 更新时间:2023-12-04 07:04:27 28 4
gpt4 key购买 nike

我正在使用 MVVM 模式在 WPF 中工作,并且通常情况看起来运行良好,因为我的大脑围绕着 WPF 和 MVVM 的细微差别。但是,我目前被困在一个特定的问题上。我的实际应用程序相当复杂,所以为了简化,让我们以 Josh Smith 的 near-defining article 为例。在模式上并使用其中的应用程序。

考虑图 2,并假设用户在名字和姓氏字段中输入了一些内容。然后,用户通过单击不同的客户选项卡或可能在同一应用程序中完全不同的 View 模型,完全离开工作区( View 模型)。在这种情况下,我希望应用程序询问“嘿,你想保存你的更改吗?是/否/取消”并做出适当的回应。这带来了……挑战。

因为我希望用户能够“取消”第一次通过建议需要 PreviewLostKeyboardFocus (因为我可以设置 Handled=true 并取消焦点转移)。但是,一些用户操作(例如单击不同工作区的选项卡)不会转移键盘焦点。 LostFocus 在这方面更好地覆盖了我,但这只是在焦点已经失去之后(当然我可以将其切换回来?)并且确定事件是否来自 View 本身存在问题(即,我们要离开整个 View )或者它只是从某个包含的对象中冒出来的。

所有这一切的大图 - 这似乎是 View 的一个问题,但这意味着在 View 中编写代码而不是魔术 View 模型。这让我觉得我没有正确看待这个。

所以我希望我错过了一些重要的概念性的 a-ha,这将使这一切变得清晰。帮助?

最佳答案

您需要专注于模型而不是 View 。也就是说,应该触发您的逻辑的更改是什么?在这种情况下,我会说这是尝试更改事件选项卡的时候。

因此,您需要一个总体 View 模型,其职责是:

  • 公开所有 subview 模型的集合(每个 subview 模型都出现在自己的选项卡中)
  • 跟踪事件(选定) subview 模型(即事件选项卡)

  • 您的 View 将以通常的方式绑定(bind)到这些属性:
    <TabControl ItemsSource="{Binding Tabs}" SelectedItem="{Binding SelectedTab}"/>
    SelectedTab属性将应用您的逻辑如下:
  • 当前标签是否脏?
  • 如果是,通过服务提示用户
  • 如果用户取消,不要更改事件标签
  • 如果用户保存或放弃更改,则更改事件选项卡

  • 我认为您缺少的关键是总体 View 模型。努力通过 my ActiveAwareCommand sample project可能有助于增加你的理解。

    关于WPF:特定控件/ View / View 模型上的 LostFocus 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1337394/

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