gpt4 book ai didi

加载时无法清除 WPF ListView 选择?

转载 作者:行者123 更新时间:2023-12-02 07:50:50 24 4
gpt4 key购买 nike

我查看了几个相关的答案,并确定我可以通过设置 lstData.SelectedIndex = -1 以编程方式清除选择;但是,当我在启动时设置数据上下文后立即执行此操作时,不知何故它永远不会工作并设置为选择列表中的第一个元素。

我还尝试将设置添加到 XAML,-1 实际上是 Visual Studio 的默认值,尽管它实际上不在 XAML 中,除非您设置它。即:

    <ListView Margin="6,6,6,203" 
IsSynchronizedWithCurrentItem="True"
x:Name="lstData"
ItemsSource="{Binding}"
SelectionChanged="lstData_SelectionChanged"
HorizontalContentAlignment="Right"
ItemContainerStyle="{StaticResource ItemContStyle}"
SelectedIndex="-1">

但这也没有效果。

此外,有趣的是,如果我将 lstData.SelectedIndex = 3;在我的 LoadData 方法中,它将从选择的第三个成员开始设置。

这是我相关的窗口加载代码:

    public Window1()
{
InitializeComponent();

// Set start and end dates to day after tomorrow, and
// the next day, by default:
StartDate = DateTime.Now.AddDays(1);
EndDate = StartDate.AddDays(2);
txtStartDate.Text = StartDate.ToShortDateString();
txtEndDate.Text = EndDate.ToShortDateString();
LoadData();
}

public void LoadData()
{
App.RefreshMembers();

App.CalculateNeededMeals(StartDate, EndDate);

// Bind the ListBox to our ObserveableCollection
LayoutRoot.DataContext =
App.db.PFW_Members.OrderBy("FullName",true).OrderBy("CancelDate",true);
lstData.SelectedIndex = -1;
}

并且在其他情况下会调用 LoadData(),在那种情况下它会清除选择。这不是第一次加载窗口。好像有一些初始化线程没有真正完成,如果它在启动时为 -1,则将选择设置为 0。

哦,是的,我确实有一个选择更改处理程序,但它不会更改选择,即:

    private void lstData_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (lstData.SelectedItem == null)
{
btnReactivate.IsEnabled = false;
btnDeactivate.IsEnabled = false;
}
else
{
if (((PFW_Member)lstData.SelectedItem).CancelDate == null)
{
btnReactivate.IsEnabled = false;
btnDeactivate.IsEnabled = true;
}
else
{
btnReactivate.IsEnabled = true;
btnDeactivate.IsEnabled = false;
}
}
}

有没有办法让它真正等到加载,然后做一些事情,或者设置延迟事件或其他东西,或者有人知道这里可能发生的事情吗?

感谢任何提示!

最佳答案

只需设置 IsSynchronizedWithCurrentItem="False"。这将是修复它的最简单方法。

这里发生的事情是这样的:在一切都初始化之后(即在构造函数之后),Bindings 将启动。此时将设置 ListBox 的 ItemsSource。在此步骤中,一些 ICollectionView 魔法在幕后发生。本质上,ListBox 将连接到源集合的默认 CollectionView,其 CurrentItem 属性始终默认为第一项。现在,如果 IsSynchronizedWithCurrentItem 为真,ListBox 会将 SelectedItem 更新为等于 ICollectionView.CurrentItem。这就是导致您提到的问题的原因。

(注意:在所有这些发生之后,Loaded 事件将被触发。因此,dnr3 关于在 Loaded 事件中设置 SelectedIndex=-1 的评论也应该有效)。

希望这是有道理的。

关于加载时无法清除 WPF ListView 选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3975102/

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