gpt4 book ai didi

WPF ComboBox SelectedItem

转载 作者:行者123 更新时间:2023-12-04 11:17:24 32 4
gpt4 key购买 nike

好的,已经使用 WPF 有一段时间了,但我需要一些帮助。

我有一个 ComboBox如下所示:

<TabControl>
<TabItem Header="1">
<ComboBox ItemsSource="{Binding MyList}" SelectedItem="{Binding MyListSelection}"/>
</TabItem>
<TabItem Header="2"/>
</TabControl>

每当我离开选项卡 1 然后回到它时,选择就会被删除。我认为这样做的原因是控件在超出范围然后重新进入时被破坏。但是在 SelectedItem 变为 null 的过程中,这并不是用户真正想要的,这是由于 UI 造成的事件生命周期。

所以我想知道最好的路线是什么?我正在使用 MVVM 构建这个应用程序,所以我可以忽略我的 ViewModel 中对 MyListSelection 属性的设置调用,但是我到处都有 ComboBoxes,并且不喜欢修改我的 ViewModel 来解决我认为的 WPF 错误。

我可以子类化 WPF ComboBox,但没有 SelectedItemChanging 事件我只能在 SelectedItem 更改时添加处理程序。

有任何想法吗?

更新:

好的,在将我的头撞到墙上后,我发现了为什么我的问题无法重现。如果由于某种原因列表项类型是一个类,则 WPF 将 SelectedItem 设置为 null,但如果它是一个值类型,则不是。

这是我的测试类(VMBase 只是一个实现 INotifyPropertyChanged 的​​抽象类):

public class TestListViewModel : VMBase
{
public TestListViewModel()
{
TestList = new List<TestViewModel>();
for (int i = 0; i < 10; i++)
{
TestList.Add(new TestViewModel(i.ToString()));
}
}

public List<TestViewModel> TestList { get; set; }

TestViewModel _SelectedTest;
public TestViewModel SelectedTest
{
get { return _SelectedTest; }
set
{
_SelectedTest = value;
OnPropertyChanged("SelectedTest");
}
}
}

public class TestViewModel : VMBase
{
public string Name {get;set;}
}

因此,当我将 TestList 更改为输入 int 并在选项卡之间来回切换时,SelectedItem 保持不变。但是当它是 TestViewModel 类型时当 tabitem 失去焦点时,SelectedTest 被设置为 null。

这是怎么回事?

最佳答案

我有完全相同的问题,直到现在我无法弄清楚问题是什么。我在 4 台具有相同操作系统、.Net 版本和硬件规范的不同机器上进行了测试,并且可以在其中两台机器上重现该问题,而在其他机器上运行良好。
我发现对我有用的解决方法是在 ItemsSource 之前定义 SelectedItem 绑定(bind)。奇怪的是,如果我遵循这种模式,一切都会按预期进行。
也就是说,您只需执行以下操作:

<Window x:Class="ComboBoxInTabItemSpike.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<StackPanel>
<TabControl>
<TabItem Header="1">
<ComboBox SelectedItem="{Binding MySelect}" ItemsSource="{Binding MyList}"/>
</TabItem>
<TabItem Header="2"/>
</TabControl>
<TextBlock Text="{Binding MySelect}"/>
</StackPanel>
</Window>

关于WPF ComboBox SelectedItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2156705/

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