2017-07-07 130 views
-1

的我有兩個組合框級聯組合框沒有更新的ItemSource依賴組合框

<ComboBox x:Name="cmbInstanceList" Margin="15,0,5,0" Grid.Row="1" Grid.Column="1" ItemsSource="{Binding InstanceList}" SelectionChanged="cmbInstanceList_SelectionChanged" 

           Height="25" 
           Style="{StaticResource InputControlErrorsCombo}" Validation.ErrorTemplate="{StaticResource validationTemplate}" />  
<ComboBox x:Name="cmbDatabaseList" Margin="15,0,5,0" Grid.Row="2" Grid.Column="1" ItemsSource="{Binding DatabaseList}" 

           Height="25" Style="{StaticResource InputControlErrorsCombo}" Validation.ErrorTemplate="{StaticResource validationTemplate}" /> 

在此基礎上cmbInstanceList,我填cmbDatabaseList通過的ItemSource屬性。 InstanceListDatabaseList是List類型的模型屬性。

在代碼後端,我使用了selectedchanged事件來填充第二個組合框。

private void cmbInstanceList_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 
      if (cmbInstanceList.SelectedValue != null) 
      { 
       this.data.InstanceName = cmbInstanceList.SelectedValue.ToString(); 
       this.data.DatabaseList.Clear(); // this is not working 
       FillData(this.data.InstanceName); 
      } 
     } 

其中this.data表示包含所有屬性的模型類。

FillData方法包含對服務的調用,如果數據不可用,返回數據值將只是一個空列表。

response = service.RequestDatabasesByInstance(request); 
       if (response != null) 
       { 
        if (response.DatabaseList != null && response.DatabaseList.Any()) 
         this.data.DatabaseList = response.DatabaseList.ToList<string>(); 
        else 
        { 
         this.data.DatabaseList.Clear(); 
         throw new Exception("No data available"); 
        } 
       } 

問題:當我選擇從cmbInstance的價值和服務返回與價值觀,所有的好,做工精細列表的響應。 當我選擇值時,服務無法檢索數據並返回空列表時出現問題。即使我設置了模型屬性來清除項目,在UI上,我仍然可以看到組合框包含值和項目沒有被清除。

+0

是'DatabaseList''ObservableCollection'? –

+0

@LeiYang其列表。它將與ObservableCollection一起工作嗎? –

+0

在wpf中你最好使用UI綁定ObservableCollection –

回答

-1

我忘記了MVVM的基本概念。 我相信這個答案可能會幫助像我這樣的人嘗試在空間中尋找草地。

分辨率的問題是: 我已經改變

this.data.DatabaseList.Clear(); //這是不工作

this.data.DatabaseList = NULL;

它開始工作。從技術上講,當我們改變屬性的值時,觸發PropertyChanged事件(在INotifyPropertyChanged接口中聲明)通知綁定,然後更新視圖。在我的情況下,我只是清除屬性持有的集合對象,該屬性並未觸發PropertyChanged事件。

希望這可以幫助別人。

0

我已經忘記了MVVM

你似乎並不知道MVVM模式是怎麼一回事......

處理在視圖中SelectionChanged事件實施的基本概念級聯ComboBoxes是而不是 MVVM。

取而代之,當設置與第一個ComboBoxSelectedItem屬性綁定的源屬性時,應該填充第二個ComboBox的源集合。在以下博客文章中有一個完整的示例和更多信息:https://blog.magnusmontin.net/2013/06/17/cascading-comboboxes-in-wpf-using-mvvm/

應該有如果您遵循MVVM模式,則在代碼隱藏中與代碼隱藏有關的代碼隱藏ComboBoxes。您在此處介紹的解決方案不符合MVVM設計模式。