更新列表视图的绑定导致对象引用未设置为对象的实例

Updating Binding of a listview is causing Object reference not set to an instance of an object

我有一个 WPF window 视图,其中包含一个具有列表绑定的列表视图。一切都很好,直到我更新了目标源,然后当从列表视图请求选定项时,我得到一个对象引用未设置为对象错误消息的实例。

下面的代码正在创建一个 wcf azure web 服务的新实例,它绑定到 wpf 中的一个列表视图。效果很好,所有行都包含正确的信息。

问题是当我想更新新项目的来源时。

ServiceReference1.Service1Client server = new ServiceReference1.Service1Client();

    public List<ServiceReference1.patient> PatientCollection
    {
        get
        {
                return server.getPatients().ToList();       
        }
    }

我使用工作正常的计时器调度程序在定时事件中更新源。

  PatientListView.GetBindingExpression(ListView.ItemsSourceProperty).UpdateTarget();

但是当我想在更新后获取所选项目时出现异常。

private void PatientListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {

        //TabControl1.SelectedIndex = 1;

        var item = (ServiceReference1.patient)PatientListView.SelectedItem;
        if (item.ews >= 5)
        {
            var theme = ThemeManager.DetectAppStyle(Application.Current);
            var accent = ThemeManager.GetAccent("Red");
            ThemeManager.ChangeAppStyle(Application.Current.Resources, accent, theme.Item1);
            ....not related code omitted...
        }

错误出现在 var item = (ServiceReference1.patient)PatientListView.SelectedItem;

任何更新选择更改方法中的内容的解决方案也将不胜感激。

您应该注意到 ListViewSelectedItem 可以是 null(也就是没有选择)。所以你需要处理这种情况。

当您 change/replace ListView 的绑定集合时,可能会发生这种情况。

var item = (ServiceReference1.patient)PatientListView.SelectedItem;
if (item != null && item.ews >= 5)
{
   // your code
}

您还可以检查传递给您的方法的 SelectionChangedEventArgs,以检查已选择的内容 (RemovedItems) 和已选择的内容 (AddedItems)