2014-02-27 306 views
0

我有必然的tbPublications一個ObservableCollection其中填充,因爲它應該具有ComboBox。然後,我從另一個觸發創建我插入新記錄到tbPublications形式,都好一個DataGrid選擇一行。組合框的SelectedIndex MVVM WPF

當我關閉所述創建表單並返回到我的ComboBox表單時,我正在清除並重新讀取我的ObservableCollection中的一個新項目,並將用戶返回到他們剛創建的項目。 ComboBox然後顯示我新近填充的集合中的一個項目,都很好。

我的問題是,在返回我的組合框的形式,新的出版物中沒有被設置爲在組合框顯示所選項目,用戶必須點擊,然後下拉框中選擇項目。

在我看來,我不能使用SelectedIndex = "0" XAML,因爲我想在頁面加載時在我的ComboBox中顯示整個ObservableCollection

有沒有辦法使用的視圖模型的方法也許要解決這個問題,事情也許如..

 private void SetSelectedIndex() 
     { 
     if (MyObservableCollection.Count == 1) 
     { 
      //Set selected indexer to "0"; 
     } 
     } 

找到了解決這個,不知道這是否是最乾淨的「MVVM」解決方案...

在我的ObservableCollection看完後我調用這個方法:

if (_ModelPublicationsObservableList.Count == 1) 
       { 
        SelectedPublication = _ModelPublication; 
        SetSelectedIndex(); 
       } 

下面是它得到當前主窗口,並將selectedIndex方法:

private void SetSelectedIndex() 
    { 
     ArticlesDataGridWindow singleOrDefault = (ComboBoxWindow)Application.Current.Windows.OfType<ComboBoxWindow>().SingleOrDefault(x => x.IsLoaded); 
     singleOrDefault.comboBox1.SelectedIndex = 0;   
    } 

回答

7

您是否考慮過使用ComboBox的SelectedItem屬性?您可以綁定組合框的選定項目屬性以獲取或設置選定的項目。

XAML

<ComboBox ItemsSource="{Binding Path=Publications}" SelectedItem="{Binding Path=SelectedPublication, Mode=TwoWay}" /> 

視圖模型

public class ItemListViewModel 
{ 
    public ObservableCollection<Publication> Publications {get; set;} 

    private Publication _selectedPublication; 
    public Publication SelectedPublication 
    { 
     get { return _selectedPublication; } 
     set 
     { 
      if (_selectedPublication== value) return; 
      _selectedPublication= value; 
      RaisePropertyChanged("SelectedPublication"); 
     } 
    } 
} 

如果你想設置從視圖模型選擇的項目,您可以設置SelectedPublication財產原樣

SelectedPublication = Publications[0]; 

或者您可以在出版物中查找所需物品並將其分配給SelectedPublication物業。

+2

+1。這幾乎總是去,除了在案件的方式在概念上的「選擇價值」是*的項目在'ComboBox'一個*性質(而不是項目本身),在這種情況下,人們可以使用'SelectedValue'和「SelectedValuePath」。在跟隨MVVM時幾乎沒有理由使用'SelectedIndex'。 –

+0

是的,我的ViewModel中有一個SelectedPublication屬性。我的XAML設置爲'SelectedItem =「{Binding SelectedPublication,Mode = TwoWay}」',但ComboBox不顯示ObservableCollection中的第1行,我仍然需要點擊下拉列表並選擇它... – Hardgraf

+0

編輯,可能不是最乾淨的MVVM解決方案... – Hardgraf

2

添加UpdateSourceTrigger =的PropertyChanged到你綁定。

SelectedItem={Binding Path=SelectedPublication, Mode=TwoWay}, UpdateSourceTrigger=PropertyChanged} 
相關問題