Проблема с отображением выбранного значения комбобокса, когда он привязан к списку <T>с помощью Linq to Entities - PullRequest
1 голос
/ 29 января 2010

У меня есть ComboBox, к которому применен ItemTemplate и который привязан к List возврата объекта с помощью linq. Я использую mvvm. Он успешно привязан к нему, но когда я устанавливаю выбранное значение из кода во время выполнения, чтобы показать выбранное значение из базы данных, он не выбирает его. Для справки вот мой ComboBox xaml.

<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 Ответ

1 голос
/ 29 января 2010

Вот пример кода:

XAML для ComboBox:

 <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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...