我有一个TabControl与多个TabItems的ItemsSource和一个额外的TabItem,添加新的TabItems到这个列表。负责添加项目的TabItem监听MouseUp事件。 问题是,添加项目后,我更新SelectedIndex,但是然后SelectedIndex更改为我单击的元素。在XAML的WPF - 如何停止TabControl在MouseUp事件中更改索引?
部分:
<TabControl ItemsSource="{Binding Tabs}" SelectedIndex="{Binding SelectedIndex}">
我的代码:
public ObservableCollection<TabItem> Tabs { get; set; }
public int SelectedIndex { get; set; }
private void Tab_add_MouseUp(object sender, MouseButtonEventArgs e)
{
e.Handled = true;
int count = Tabs.Count;
TabItem tabItem = new TabItemDepartment("Header #x");
Tabs.Insert(count - 1, tabItem);
SelectedIndex = count - 2;
}
编辑:最终的代码(仅适用于相关的部分)的基础上的答案:
public class CalendarViewModel : INotifyPropertyChanged
{
public ObservableCollection<TabItem> Tabs { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
private int _SelectedIndex;
public int SelectedIndex
{
get
{
return _SelectedIndex;
}
set
{
_SelectedIndex = value;
NotifyPropertyChanged(nameof(SelectedIndex));
}
}
private void Tab_add_MouseDown(object sender, MouseButtonEventArgs e)
{
TabItem tabItem = new TabItemDepartment("Header #x");
Tabs.Insert(Tabs.Count - 1, tabItem);
SelectedIndex = Tabs.Count - 2;
e.Handled = true;
}
protected void NotifyPropertyChanged(string propertyName = null)
{
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
尝试在预览mousedown事件做,如果'e.Handled'从路由时停止的情况下,那么它应该工作。 – Jai
工作,但它不会改变SelectedIndex。所以当我点击添加选项卡时,索引保持不变。 – Johannes