2011-12-21 42 views
0

我正在使用Silverlight 4,並且難以使我的組合框正常工作。 在更改所選項目時,selectedItem值保留爲空。我定義組合框如下:用於組合框的SelectedItem始終爲空

<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方法的代碼。 – 2011-12-21 15:27:27

+0

ProductGroupCombobox_SelectionChanged沒有做任何聰明的事情。僅檢查ProductGroupCombobox.SelectedItem是否不同於NULL值。 – Ned 2011-12-21 15:48:34

回答

0

SelectedItem您的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; 如果我把ItemsSource =「{Binding ProductTypes}」或ItemsSource =「{Binding dataContext.ProductTypes}」,應用程序崩潰。所以,我不知道該怎麼做? – Ned 2011-12-21 15:45:57

+0

@Vuk將'Window'的'DataContext'設置爲你的類型。你的類型中的兩個屬性應該是'ProductTypes',它應該是一個集合和'SelectedProductType',它應該是'ProductTypes'返回的任何類型。因此'DataContext = myType;'在XAML中,{Binding ProductTypes}和{Binding SelectedProductType}' – 2011-12-21 16:03:58

+0

@Vuk編輯答案以提供示例;儘管你可以使用複雜的類型,但使用字符串可以簡化它。 – 2011-12-21 16:10:45