2012-05-25 65 views
0

問題總結層疊兩個組合框 - 兒童組合框不選擇當前值

當使用2個級聯組合框,它是從哪裏來的孩子組合框不選擇當前項目,而不是一個空項(我不知道從!)被選中。

問題詳情

我在XAML中聲明瞭兩個組合框下面給出。在劇中的兩個實體是StandardRackRelayConfig

XAML:

<ComboBox ItemsSource="{Binding StandardRacks}" DisplayMemberPath="Name" 
      SelectedItem="{Binding StandardRack, Mode=TwoWay}" SelectedValuePath="Id" 

<ComboBox ItemsSource="{Binding RelayConfigs}" DisplayMemberPath="DisplayName" 
      SelectedValue="{Binding DefaultRelayConfig, Mode=TwoWay}" SelectedValuePath="Id" 

這裏有後盾性能和代碼加載組合框在視圖模型

視圖模型

private ObservableCollection<StandardRack> _standardRacks; 
public ObservableCollection<StandardRack> StandardRacks { 
    get { return _standardRacks; } 
    set { _standardRacks = value; RaisePropertyChanged(() => StandardRacks); } 
} 

private StandardRack _standardRack; 
public StandardRack StandardRack { 
    get { return _standardRack; } 
    set { 
     if (_standardRack != value) { 
      _standardRack = value; 
      LoadRelayConfigs(); 
      RaisePropertyChanged(() => StandardRack); 
     } 
    } 
} 

private ObservableCollection<RelayConfig> _relayConfigs; 
public ObservableCollection<RelayConfig> RelayConfigs { 
    get { return _relayConfigs; } 
    set { _relayConfigs = value; RaisePropertyChanged(() => RelayConfigs); } 
} 

private RelayConfig _defaultRelayConfig; 
public RelayConfig DefaultRelayConfig { 
    get { return _defaultRelayConfig; } 
    set { _defaultRelayConfig = value; RaisePropertyChanged(() => DefaultRelayConfig); } 
} 

private void LoadRack() { 
    StandardRacks = new ObservableCollection<StandardRack>(
        unitOfWork.StandardRackRepository.GetQueryable().Include(sr => sr.StandardRelay).ToList()); 
    if (StandardRacks.Count > 0) { 
     StandardRack = Rack.StandardRack; //Set the current value of StandardRacks combobox 
    } 
} 

//Loads RelayConfigs Combobox based on Current Value of StandardRacks Combobox 

private void LoadRelayConfigs() { 
    RelayConfigs = new ObservableCollection<RelayConfig>(
     unitOfWork.RelayConfigRepository.GetQueryable() 
     .Where(rc => rc.StandardRelays.Any(srl => srl.Id == StandardRack.StandardRelay.Id)).ToList()); 
    DefaultRelayConfig = Rack.DefaultRelayConfig; //Set Current Value of RelayConfigs Combobox. Does not work. 
} 

上面的代碼正確加載了組合框(StandardRacks和RelayConfigs)項。但是,RelayConfigs選擇的值未設置爲從XAML指向的值。相反,我在RelayConfigs Combobox中獲得一個空項目作爲當前項目。

回答

0

'RelayConfigs'選擇的'DefaultRelayConfig'部分是?

+0

其實並非如此。它裝載在以前的Unit Of Work中。這似乎是問題。那麼,但是SelectedValuePath =「Id」應該照顧那個? – Jatin

+0

迭戈,DefaultRelayConfig不是RelayConfigs集合的一部分(你要求選擇,我很困惑你的意思)。但是DefaultRelayConfig.Id和RelayConfigs RelayConfig.Id是相同的,所以我希望SelectedValuePath =「Id」應該從RelayConfigs集合中選擇正確的RelayConfig。 – Jatin

+0

@DiegoModoloRiberio - 要求澄清應該在評論中,而不是回答。 –