选择 tabitem 时事件的更好方法
Better approach for event when tabitem is selected
我有一个 tabcontrol,里面有 8 个 tabitem 和许多数据网格和列表框。
我只想在选择一个特定的 tabitem 时触发一个事件。
第一种方法是在带有 if 语句的 tabcontrol 中使用 SelectionChanged
If ((thetabiwant!=null)&& (thetabiwant.IsSelected))
{
//code here
}
第二种方法是在所需的 tabitem 中有一个 mouseup 事件。
最好的方法是什么?
(起伏是 SelectionChanged 由于数据网格而一直触发,而 mouseup 事件解决方案并不让我开心)
谢谢。
一般来说,您不必太担心触发的事件,然后因为它们不符合您的条件而跳过。框架本身做了很多,你最终也会做很多(例如在收听INotifyPropertyChanged
事件时)。
在您的情况下,触发的少数额外 SelectionChanged
事件实际上可以忽略不计。每个事件都需要用户实际更改选项卡,而且这种情况不会经常发生。另一方面,一旦进入您关心的选项卡,实际上会发生很多鼠标事件。并不是说你也需要关心它们的数量(除非你遇到问题,否则你真的不应该关心)但是你当然可以避免它。
所以在这种情况下,是的,跳过 SelectionChanged
事件是最好的方法。
您还可以绑定 IsSelected 属性
在集合中做你需要做的,当它变成真时
<TabControl Grid.Row="0">
<TabItem Header="One" IsSelected="{Binding Path=Tab1Selected, Mode=TwoWay}"/>
<TabItem Header="Two" IsSelected="{Binding Path=Tab2Selected, Mode=TwoWay}"/>
</TabControl>
private bool tab1Selected = true;
private bool tab2Selected = false;
public bool Tab1Selected
{
get { return tab1Selected; }
set
{
if (tab1Selected == value) return;
tab1Selected = value;
NotifyPropertyChanged("Tab1Selected");
}
}
public bool Tab2Selected
{
get { return tab2Selected; }
set
{
if (tab2Selected == value) return;
tab2Selected = value;
if (tab2Selected)
{
MessageBox.Show("Tab2Selected");
// do your stuff here
}
NotifyPropertyChanged("Tab2Selected");
}
}
我有一个 tabcontrol,里面有 8 个 tabitem 和许多数据网格和列表框。 我只想在选择一个特定的 tabitem 时触发一个事件。
第一种方法是在带有 if 语句的 tabcontrol 中使用 SelectionChanged
If ((thetabiwant!=null)&& (thetabiwant.IsSelected))
{
//code here
}
第二种方法是在所需的 tabitem 中有一个 mouseup 事件。
最好的方法是什么?
(起伏是 SelectionChanged 由于数据网格而一直触发,而 mouseup 事件解决方案并不让我开心)
谢谢。
一般来说,您不必太担心触发的事件,然后因为它们不符合您的条件而跳过。框架本身做了很多,你最终也会做很多(例如在收听INotifyPropertyChanged
事件时)。
在您的情况下,触发的少数额外 SelectionChanged
事件实际上可以忽略不计。每个事件都需要用户实际更改选项卡,而且这种情况不会经常发生。另一方面,一旦进入您关心的选项卡,实际上会发生很多鼠标事件。并不是说你也需要关心它们的数量(除非你遇到问题,否则你真的不应该关心)但是你当然可以避免它。
所以在这种情况下,是的,跳过 SelectionChanged
事件是最好的方法。
您还可以绑定 IsSelected 属性
在集合中做你需要做的,当它变成真时
<TabControl Grid.Row="0">
<TabItem Header="One" IsSelected="{Binding Path=Tab1Selected, Mode=TwoWay}"/>
<TabItem Header="Two" IsSelected="{Binding Path=Tab2Selected, Mode=TwoWay}"/>
</TabControl>
private bool tab1Selected = true;
private bool tab2Selected = false;
public bool Tab1Selected
{
get { return tab1Selected; }
set
{
if (tab1Selected == value) return;
tab1Selected = value;
NotifyPropertyChanged("Tab1Selected");
}
}
public bool Tab2Selected
{
get { return tab2Selected; }
set
{
if (tab2Selected == value) return;
tab2Selected = value;
if (tab2Selected)
{
MessageBox.Show("Tab2Selected");
// do your stuff here
}
NotifyPropertyChanged("Tab2Selected");
}
}