gpt4 book ai didi

c# - 如何保存绑定(bind)到 wpf 中的 ObservableCollection 的 tabcontrol 项的 tab 顺序?

转载 作者:太空宇宙 更新时间:2023-11-03 15:14:13 25 4
gpt4 key购买 nike

我有一个绑定(bind)到 tabcontrol 的 ObservableCollection。

<TabControl
ItemsSource="{Binding Steps}"
SelectedItem="{Binding SelectedStep}"
CanUserReorder="{Binding EditMode}"
</TabControl>

如果用户处于 EditMode 中,他可以重新排序选项卡项目。当我使用 tabcontrol 离开 View 时,我丢失了由用户修改的 tab 顺序。我怎样才能避免这种情况?

感谢您的帮助!

最佳答案

我明白了!此解决方案在 mvvm-pattern 中实现。

每次集合 Steps 发生变化时,添加或删除项目,然后重新排序它们的位置。用户可以通过使用 ComponentOne 的 TabControl 或使用 Bea Stollnitz 的拖放功能对 View 中 TabControl 的 TabItems 进行重新排序。

View 模型:

public class MyViewModel
{
public MyModel Model {/*get... set*/}
public ObservableCollection<StepViewModel> Steps {/*get... set...*/}
public StepViewModel SelectedStep {/*get... set...*/}

public MyViewModel()
{
Model = new MyModel();
Steps = new ObservableCollection<StepViewModel>();
Model.Steps = new ObservableCollection<StepModel>();
// Load the saved Model with the steps and their positions
Model.Steps = LoadFromXml();

Steps.CollectionChanged += Steps_OnCollectionChanged;
// Add the Steps in the right order
for (int i = 0; i < Steps.Count; i++)
{
var item = Steps.First(x => x.Position == i);
var vm = new StepViewModel();
Steps.Add(vm);
}
}

private void Steps_OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Add)
{
foreach (StepViewModel vm in e.NewItems)
{
if (!Model.Steps.Contains(vm.Model))
Model.Steps.Add(vm.Model);
}
}
else if (e.Action == NotifyCollectionChangedAction.Remove)
{
foreach (StepViewModel vm in e.OldItems)
{
if (Model.Steps.Contains(vm.Model))
Model.Steps.Remove(vm.Model);
}
}
// Match the temporary collectionindex to a position-property
foreach (StepViewModel item in Steps)
{
item.Position = Steps.IndexOf(item);
}
}

}

关于c# - 如何保存绑定(bind)到 wpf 中的 ObservableCollection 的 tabcontrol 项的 tab 顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39705487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com