2011-12-21 7 views
0

Я работаю над Silverlight 4, и у меня возникают трудности с тем, чтобы моя команда со списком работала правильно. При изменении выбранных элементов selectedItem значение остается равным нулю. Я определил combobox следующим образом:SelectedItem для combobox всегда null

<ComboBox 
x:Name="ProductGroupCombobox" 
Grid.Row="2" 
Margin="10,15" 
Height="30" Width="200" 
Background="{x:Null}" 
BorderBrush="{x:Null}" 
ItemsSource="{Binding}" 
SelectionChanged="ProductGroupCombobox_SelectionChanged" 
SelectedItem="{Binding Path=ProductType, Mode=TwoWay}"> 
        <ComboBox.ItemTemplate> 
         <DataTemplate> 
          <TextBlock Text="{Binding Path=Name}" /> 
         </DataTemplate> 
        <ComboBox.ItemTemplate> 

</ComboBox> 

У кого-нибудь есть идея?

+1

Просьба указать код метода ProductGroupCombobox_SelectionChanged. –

+0

ProductGroupCombobox_SelectionChanged не делает ничего умного. Проверяет, не отличается ли значение ProductGroupCombobox.SelectedItem значение NULL. – Ned

ответ

0

Свойство SelectedItem должно быть привязано к экземпляру в вашей коллекции, в то время как оно кажется, что у вас есть DataContext, установленный в то, что я предполагаю, это коллекция. Обратите внимание, как я скорректировал привязку как привязку коллекции, а отдельное свойство должно быть экземпляром экземпляра в коллекции.

public class MyData : INotifyPropertyChanged 
{ 
    List<String> ProductTypes {get; set;} 

    String _selectedProductType = String.Empty; 
    String SelectedProductType 
    { 
     get 
     { 
      return _selectedProductType; 
     } 
     set 
     { 
      _selectedProductType = value; 
      PropertyChangedEventHandler handler = PropertyChanged; 
      if(handler != null) 
       handler(this, new PropertyChangedEventArgs("SelectedProductType"); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

... 

this.DataContext = new MyData(); 

... 

<ComboBox 
    x:Name="ProductGroupCombobox" 
    Grid.Row="2" 
    Margin="10,15" 
    Height="30" Width="200" 
    Background="{x:Null}" 
    BorderBrush="{x:Null}" 
    ItemsSource="{Binding ProductTypes}" 
    SelectionChanged="ProductGroupCombobox_SelectionChanged" 
    SelectedItem="{Binding Path=SelectedProductType, Mode=TwoWay}"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Path=Name}" /> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 
+0

Да, но я не уверен, как это сделать. В коде C# у меня есть следующее: ProductGroupCombobox.DataContext = dataContext.ProductTypes; И если я помещаю ItemSource = "{Binding ProductTypes}" или ItemsSource = "{Binding dataContext.ProductTypes}", сбой приложений. Итак, я не уверен, как это сделать? – Ned

+0

@Vuk Установите 'DataContext' в' Window' для вашего типа. Два свойства вашего типа должны быть «ProductTypes», которые должны быть коллекцией и «SelectedProductType», которая должна быть любым типом, который возвращает «ProductTypes». Итак, 'DataContext = myType;' В XAML, '{Binding ProductTypes}' и '{Binding SelectedProductType}' –

+0

@Vuk Отредактированный ответ для примера; используя Strings, чтобы сделать его простым, хотя вы можете использовать сложный тип. –

Смежные вопросы