我查看了几个相关的答案,确定可以通过设置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();
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);
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;
}
}
}
谢谢你的建议!