代码之家  ›  专栏  ›  技术社区  ›  Dronz

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

  •  2
  • Dronz  · 技术社区  · 14 年前

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

        <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;
                }
            }
        }
    

    谢谢你的建议!

    1 回复  |  直到 14 年前
        1
  •  7
  •   ASanch    14 年前

    只需设置IsSynchronizedWithCurrentItem=“False”。这将是最简单的解决方法。

    (注意:所有这些发生后,加载的事件将被触发。因此,dnr3在加载的事件中设置SelectedIndex=-1的注释也应该起作用)。

    希望这有意义。