Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何防止对话框多次打开?_C#_Wpf_Mvvm - Fatal编程技术网

C# 如何防止对话框多次打开?

C# 如何防止对话框多次打开?,c#,wpf,mvvm,C#,Wpf,Mvvm,我在两个选项卡中有一个数据网格。因此,当第二个选项卡单击时,应该会打开一个过滤器窗口(不是,而是)。我是这样做的 if (tabControl1.SelectedIndex == 1) { DashboardFilterView filterWindow = new DashboardFilterView(); filterWindow.ShowDialog(); } 当我点击窗口的关闭按钮时,它被关闭 问题: 关闭弹出窗口后,若我单击当前选项卡中的d

我在两个选项卡中有一个数据网格。因此,当第二个选项卡单击时,应该会打开一个过滤器窗口(不是
,而是
)。我是这样做的

if (tabControl1.SelectedIndex == 1)  {      
     DashboardFilterView filterWindow = new DashboardFilterView();   
     filterWindow.ShowDialog();  }
当我点击窗口的关闭按钮时,它被关闭

问题

关闭弹出窗口后,若我单击当前选项卡中的datagrid行,将再次显示弹出窗口


如何防止这种情况发生一次以上?

由于
选项卡控制1\u selection changed
事件为偶数网格行单击触发,我添加了一个检查以确认此事件是否从选项卡中发生

e.OriginalSource是TabControl
解决了这个问题

 private void tabControl1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (e.OriginalSource is TabControl)
            {
                if (tabControl1.SelectedIndex == 0)
                {
                    // Do something               
                }
                else if (tabControl1.SelectedIndex == 1)
                {  
                    DashboardFilterView filterWindow = new DashboardFilterView();
                    filterWindow.ShowDialog();         
                }
            }

        }

你到底想做什么?第二次你不想打开一个弹出窗口?你如何处理选项卡点击?在网格行点击我不需要再次打开弹出窗口,这是一个单独的动作,还有一个奇怪的行为,这只会发生在第一次点击网格行时,在那个之后,点击网格行的行为和往常一样。我不确定我是否正确理解了你们的问题,但可能有一个默认值为true的布尔值。当您单击并且值为true时,将弹出窗口并将值设置为false。更改选项卡时,将该值再次设置为true。就我个人而言,我会检查你正在尝试做什么,并重新设计你的界面,而不是使用这样的逻辑。你在哪里调用这些代码?在TabControl的鼠标事件处理程序中?只是出于好奇。在网格行单击时作为
e.OriginalSource
传递的是什么?当网格行单击
e.OriginalSource
is
DataGrid
时,您的答案为路由事件提供了一个很好的解决方法。我想另一个解决方案是处理
DataGrid.SelectionChanged
并将其设置为handled,但如果有多个控件触发此事件,则这是一种过度杀伤力。