2012-01-27 67 views
0

我有對話框,包含一個組合框組合框觸發

<ComboBox Margin="0,1,34,36" Grid.Row="1" Grid.Column="1" ItemsSource ="{Binding Path=CompanyView}" DisplayMemberPath="CompanyName" IsSynchronizedWithCurrentItem="True" 
       SelectedItem="{Binding Path=SelectedCompany}" 

的的ItemSource綁定到collectionviewsource和所選擇的項目被綁定到我的viewmodel中的屬性是不共享

private Company selectedCompany; 
     public Company SelectedCompany 
     { 

      get{ return this.selectedCompany;} 
      set 
      { 
       this.selectedCompany = value; 
       FilterString = this.selectedCompany.Id; 
      } 
     } 

我可以根據需要多次打開和關閉對話框,而不會出現任何問題。我的問題是, 如果我選擇公司組合中的一個項目,然後關閉對話框,當我再次打開對話框窗體試圖設置SelectedCompany,在這種情況下,我爲空。我可以檢查null,但我寧願明白爲什麼會發生這種情況。

回答

0

最可能的原因是CollectionViewSource跟蹤它自己的SelectedItem,並且此項目可能是null。所以當它綁定ItemsSource它也試圖同時綁定SelectedItemCollectionViewSource.SelectedItem。在該綁定完成後,將運行常規SelectedItem綁定,但此時SelectedCompany已設置爲null

如果是這種情況,我建議遠離CollectionViewSource,並將其綁定到直集合。

+0

感謝您的回答。我需要collectionviewsource進行過濾和排序,但對我來說似乎很奇怪,因爲我每次顯示對話框時都會創建一個新的視圖模型。在我看來,當我關閉對話框時必須保留一些東西。 – klashagelqvist 2012-01-27 14:35:22

+0

如果我使用VS並在構造函數中斷開並使objectid可以看到其新的viewmodel。 – klashagelqvist 2012-01-27 14:37:25

+0

@klashagelqvist你能發佈更多的代碼嗎?尤其是創建ViewModel的位數,綁定的對話框以及初始SelectedCompany的設置? – Rachel 2012-01-27 14:47:20

0

在我看來,問題可能是你有不同的window/viewmodel實例,打開一個新的對話框可能會創建一個新的SelectedCompany默認值爲null的虛擬機實例。這是你的情況嗎?

+0

不,我需要創建一個新的viewmodel,只有當我在之前打開的對話框中選擇了一個客戶,該問題發生時 – klashagelqvist 2012-01-27 14:41:18

相關問題