【问题标题】:WPF, detect which Tab you are navigating AWAY fromWPF,检测您正在从哪个选项卡导航
【发布时间】:2014-12-23 14:35:12
【问题描述】:

我有一个带有多个选项卡的 WPF 应用程序。在每个选项卡下,用户可以更改一些设置(使用复选框、文本框等),然后用户必须单击“更新”按钮才能保存这些设置。一切正常,但其中一项要求是在用户尝试切换到其他选项卡而不单击“更新”按钮时提醒用户。 所以我正在尝试使用

TabItem_LostFocus

事件处理程序来实现它,但每次我单击选项卡中的某些内容时都会触发此事件。我想我可以通过放置来解决这个问题

e.Handled = true

对于我拥有的每个控件,但这听起来不像是一个优雅的解决方案(尤其是当我的选项卡下的所有内容都没有单击事件处理程序时)。是否有其他方法可以确定您何时从当前选项卡切换? 谢谢

【问题讨论】:

  • 如果用户没有在您的弹出窗口中单击“确定”,您是否要阻止他们导航离开该选项卡?
  • 我想阻止用户离开选项卡,直到他使用选项卡保存更改(通过单击更新按钮)我想我得到了我正在寻找的答案。但是,如果您有更优雅的解决方案,请分享:) 谢谢

标签: c# wpf


【解决方案1】:

要满足您的要求,您只需要将数据绑定到TabControl.SelectedIndexTabControl.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;
    }
}

【讨论】:

【解决方案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 概念的新手
猜你喜欢
  • 1970-01-01
  • 2012-01-22
  • 2012-04-30
  • 2020-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-19
  • 2020-12-14
相关资源
最近更新 更多