WPF,检测您正在从哪个选项卡导航
Posted
技术标签:
【中文标题】WPF,检测您正在从哪个选项卡导航【英文标题】:WPF, detect which Tab you are navigating AWAY from 【发布时间】:2014-12-23 14:35:12 【问题描述】:我有一个带有多个选项卡的 WPF 应用程序。在每个选项卡下,用户可以更改一些设置(使用复选框、文本框等),然后用户必须单击“更新”按钮才能保存这些设置。一切正常,但其中一项要求是在用户尝试切换到其他选项卡而不单击“更新”按钮时提醒用户。 所以我正在尝试使用
TabItem_LostFocus
事件处理程序来实现它,但每次我单击选项卡中的某些内容时都会触发此事件。我想我可以通过放置来解决这个问题
e.Handled = true
对于我拥有的每个控件,但这听起来不像是一个优雅的解决方案(尤其是当我的选项卡下的所有内容都没有单击事件处理程序时)。是否有其他方法可以确定您何时从当前选项卡切换? 谢谢
【问题讨论】:
如果用户没有在您的弹出窗口中单击“确定”,您是否要阻止他们导航离开该选项卡? 我想阻止用户离开选项卡,直到他使用选项卡保存更改(通过单击更新按钮)我想我得到了我正在寻找的答案。但是,如果您有更优雅的解决方案,请分享:) 谢谢 【参考方案1】:要满足您的要求,您只需要将数据绑定到TabControl.SelectedIndex
或TabControl.SelectedItem
属性:
<TabControl ItemsSource="Binding TabItemCollection"
SelectedItem="Binding SelectedTabItem" />
然后在你的视图模型或代码后面:
private YourDataType selectedItem;
public YourDataType SelectedItem
get return selectedItem;
set
// selectedItem represents the previous TabItem
// value represents the new TabItem
selectedItem = value;
【讨论】:
谢谢!这正是我所需要的!我会给你一个投票,但我没有学分 LOL 请查看 Stack Overflow 帮助中心的 What should I do when someone answers my question? 页面。【参考方案2】:您可以绑定到每个 TabItem
.. 的 IsSelected
属性,然后在 setter 中进行检查
<TabControl>
<TabItem IsSelected="Binding TabItem1IsSelected"/>
</TabControl>
属性:
public bool TabItem1IsSelected
get return _tabItem1IsSelected;
set
if (_tabItem1IsSelected)
if (!value)
// Check to see if user has updated
if (!userUpdated)
value = true;
_tabItem1IsSelected = value;
RaisePropertyChanged();
【讨论】:
谢谢!这比我想象的要简单得多。我是 WPF/Binding 概念的新手以上是关于WPF,检测您正在从哪个选项卡导航的主要内容,如果未能解决你的问题,请参考以下文章