gpt4 book ai didi

wpf - ListBox TwoWay 绑定(bind)到 SelectedItem

转载 作者:行者123 更新时间:2023-12-04 17:41:57 29 4
gpt4 key购买 nike

我已经多次看到这个问题被问过,并且一遍又一遍地检查了我的代码。但是当我分配给我的 SelectedItem -bound 属性与对象,它不会更新显示的选定项。看来 ListBox认为我分配的对象不是其项目的成员。

public class MainViewModel : ViewModelBase
{
//...
public SortedObservableCollection<TubeViewModel> Items { get; private set; }
public TubeViewModel SelectedTube { //get, set, propertychanged, etc. }
}

<ListBox x:Name="TubeList"
Margin="10"
ItemsSource="{Binding Items}"
ItemTemplate="{StaticResource TubeTemplate}"
SelectedItem="{Binding SelectedTube, Mode=TwoWay}"
SelectionMode="Single"
VirtualizingStackPanel.IsVirtualizing="False">
</ListBox>

这是我尝试设置 SelectedTube 的地方之一的 impl - 肯定发生在主线程上。
 var match =
from t in Items
where t.Model.DataFileName == filename
select t;
if (match.Any())
SelectedTube = match.First();

我注意到 SelectedTube除非我手动单击它,否则从未突出显示,但有点忽略它。但后来我想 ScrollIntoViewCentered选中的项目,所以我添加了 DependencyProperty在我看来要注意 SelectedItem变化。处理程序最初看起来像这样:
private void OnSelectedItemChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
{
if (TubeList.SelectedItem == null)
return;

TubeList.ScrollIntoViewCentered(TubeList.SelectedItem);
}

但如果我设置 SelectedItem 则不起作用通过我的绑定(bind)。在决定我只想滚动它不在屏幕上时,我将代码更改为:
private void OnSelectedItemChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
{
if (TubeList.SelectedItem == null)
return;

var container = TubeList.ItemContainerGenerator.ContainerFromItem(TubeList.SelectedItem) as FrameworkElement;

if(!container.IsVisible)
TubeList.ScrollIntoViewCentered(TubeList.SelectedItem);
}

如果 SelectedItem是外部设置的,容器为空。每次。我什至添加了检查 null 的代码,然后遍历 ItemsSource寻找文件名匹配,然后更新 SelectedItem确保 SelectedItem绝对是列表框中的一个对象。没运气。

这不是可见性的东西,如果该项目在屏幕上,它仍然不会突出显示。我需要实现某种平等功能吗?我在这件事上浪费的时间比人们想象的要多。

谢谢。

最佳答案

也许这也与 ItemContainerGenerators 的事实有关。在单独的线程中生成... ( at least in the TreeView )

在询问 ItemContainerGenerators 之前尝试调用 UpdateLayout()属性(property)。

关于wpf - ListBox TwoWay 绑定(bind)到 SelectedItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1909099/

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