我有一個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