2010-01-29 29 views
1

我有一个ComboBox,其是具有施加在其上的ItemTemplate并且是结合的实体返回一个List使用LINQ组合框的选择的值。我正在使用mvvm。它成功地绑定了它,但是当我在运行时从代码中设置它的选定值以显示来自db的选定值时,它不会选择它。这里供参考是我的ComboBox xaml。问题示出了当它被绑定到使用LINQ列表<T>到实体

<DataTemplate x:Key="ManufacturerDataTemplate"> 
    <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="50"/>  
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions>  
     <Image x:Name="imgManufacturer" Width="25" Height="25" 
       Source="{Binding Path=ManufacturerImage}" Grid.Column="0"/> 
     <TextBlock x:Name="txtManufacturer" Grid.Column="1" HorizontalAlignment="Left" 
        VerticalAlignment="Center" Text="{Binding Path=ManufacturerName}" 
        Tag="{Binding Path=ManufacturerID}"/> 
    </Grid> 
</DataTemplate> 


<ComboBox x:Name="cboManufacturer" 
      SelectionChanged="cboManufacturer_SelectionChanged" 
      ItemsSource = "{Binding Path=CurrentManufacturers}"       
      SelectedValue="{Binding Path=SelectedManufacturer}"       
      Grid.Column="3" Grid.Row="2" Margin="20,9.25,68,7.75" 
      ItemTemplate="{StaticResource ManufacturerDataTemplate}" TabIndex="6"/> 

这里是我从代码背后viewModel的一部分。

List<tblManufacturer> currentManufacturers 
     = new List<tblManufacturer>(); 

tblManufacturer selectedManufacturer = null; 

public List<tblManufacturer> CurrentManufacturers 
{ 
    get 
    { 
     return currentManufacturers; 
    } 
    set 
    { 
     currentManufacturers = value; 
     NotifyPropertyChanged("CurrentManufacturers"); 
    } 
} 

public tblManufacturer SelectedManufacturer 
{ 
    get 
    { 
     return selectedManufacturer; 
    } 
    set 
    { 
     selectedManufacturer = currentManufacturers.Where(mm => mm.ManufacturerID == Convert.ToInt32(selectedDevice.tblManufacturer.EntityKey.EntityKeyValues[0].Value)).First(); 
     NotifyPropertyChanged("SelectedManufacturer"); 
    } 
} 

回答

1

下面是示例代码片段:

的XAML组合框:

<ComboBox ItemsSource="{Binding ManufacturerList}" DisplayMemberPath="Name" SelectedValuePath="ID" 
       SelectedItem="{Binding SelectedManufacturer}"/> 

视图模型代码:

public class Manufacturer 
{ 
    public int ID { get; set; } 

    public string Name { get; set; } 
} 





private List<Manufacturer> _manufactuerlist; 
    private Manufacturer _selectedManufacturer; 

private void NotifyPropertyChanged(string propertyName) 
     { 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
      } 
     } 

#region INotifyPropertyChanged Members 

     public event PropertyChangedEventHandler PropertyChanged; 

     #endregion 
    public Manufacturer SelectedManufacturer 
    { 
     get 
     { 
      return _selectedManufacturer; 
     } 
     set 
     { 
      _selectedManufacturer = value; 
      NotifyPropertyChanged("SelectedManufacturer"); 
     } 
    } 

    public List<Manufacturer> ManufacturerList 
    { 
     get 
     { 
      return _manufactuerlist; 
     } 
     set 
     { 
      _manufactuerlist = value; 
      NotifyPropertyChanged("ManufacturerList"); 
     } 
    } 

最后设置选定制造商喜欢你的视图模型这个:

SelectedManufacturer = _manufactuerlist.Find(m => m.ID == 2); 
+0

我有一个应用于组合框的DataTemplate,因此我无法设置displaynamepath属性。 PLZ告诉其他方式来做到这一点。 – 2010-02-01 10:36:54

+0

对不起,上面的评论写错了。你的代码帮助我解决了我的问题。 – 2010-02-01 10:40:15