2015-04-22 34 views
1

我有WPF窗口視圖,其中包含列表視圖具有列表綁定。一切工作很好,直到我更新目標源,然後當從列表視圖請求selecteditem時,我得到的對象引用未設置爲對象錯誤消息的實例。更新列表視圖的綁定導致對象引用未設置爲對象的實例

下面的代碼正在創建一個wcf azure web服務的新實例,並且這個實例綁定到了wpf中的listview。它效果很好,所有的行都包含正確的信息。

問題是,當我想更新新項目的來源。

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

正好出現在變種項=(ServiceReference1.patient)PatientListView.SelectedItem該錯誤;

任何解決方案,以更新什麼在選擇更改方法,以及將不勝感激。

+1

你確定這是異常被拋出就行了,在我看來,當你更新目標源時,所選項目變爲null,因此* item.ews *會拋出NRE? – NValchev

+0

你是正確的,它是在if(item.ews> = 5)拋出異常的下一行。但我不明白爲什麼它會是空的,如果我更新目標源和選定的項目設置每次選擇更改。 – rkleman12

+2

這是預料之中的,改變ItemsSource意味着改變物品,當物品發生變化時你怎麼能有相同的選擇。例如,如果你選擇了第16行,那麼更新源代碼,但這次只提供了15個項目,所以如果選擇被保留了,就會拋出像IndexOutOfRangeException之類的東西,因爲沒有第16個元素 – NValchev

回答

1

您應該注意ListViewSelectedItem可以是null(也就是說,沒有選擇任何東西)。所以你需要處理這種情況。

當您更改/替換ListView的綁定集合時,可能會發生這種情況。

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

你也可以檢查得到傳遞給你的方法來檢查選擇什麼(RemovedItems),什麼SelectionChangedEventArgs選擇(AddedItems

+0

修復了這個問題。我從來沒有想到這是問題。 – rkleman12

相關問題