【发布时间】:2020-05-25 17:46:35
【问题描述】:
我正在使用从 Stackoverflow 获取的代码。
我想在SelectionChanged 事件中将字符串从一个视图模型传输到另一个视图模型。但是当我点击 Tab2 时,我得到 Tab2 消息框,但是当我点击 Tab1 时,我得到两个消息框,表明两者都在执行。当我点击 Tab1 时也是一样,两个消息框都可以看到。
MainView.xaml
<TabControl>
<TabItem Header="My tab 1" Selector.IsSelected="{Binding IsMyTab1Selected}"> ... </TabItem>
<TabItem Header="My tab 2" Selector.IsSelected="{Binding IsMyTab2Selected}"> ... </TabItem>
</TabControl>
MainViewModel.cs
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName) {
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public MainViewModel() {
PropertyChanged += handlePropertyChanged;
}
public bool IsMyTab1Selected {
get { return _IsMyTab1Selected ; }
set {
if (value != _IsMyTab1Selected ) {
_IsMyTab1Selected = value;
OnPropertyChanged("IsMyTab1Selected ");
}
}
}
private bool _IsMyTab1Selected = false;
public bool IsMyTab2Selected {
get { return _IsMyTab2Selected ; }
set {
if (value != _IsMyTab2Selected ) {
_IsMyTab2Selected = value;
OnPropertyChanged("IsMyTab2Selected ");
}
}
}
private bool _IsMyTab2Selected = false;
private void handlePropertyChanged(object sender, PropertyChangedEventArgs e) {
if (e.PropertyName == "IsMyTab1Selected") {
MessageBox.Show("Tab_1 Clicked!");
} else if (e.PropertyName == "IsMyTab2Selected") {
MessageBox.Show("Tab_2 Clicked!");
}
}
我无法获得互斥性,指出我哪里错了。
【问题讨论】:
-
你不能指望人们通过多页长链接。在您的问题中添加一个最小的代码示例。否则很难帮助你。为什么会有注释掉的代码?
-
@Blechdose 知道了,所以我发布了来自:stackoverflow.com/a/46074186 的代码
-
@highlander141:当第一个选项卡的
IsSelected属性设置为true 时,第二个选项卡设置为false,反之亦然。这是预期的行为,不是吗?或者你的问题是什么? -
是的,即使我也这么认为。但是两个消息框都在执行。正如 Gaz 在他的回答中所说,'e.NewValue' 也必须被检查..
标签: c# wpf mvvm tabcontrol tabitem