2011-12-21 14 views
0

私はSilverlight 4で作業しています。私はコンボボックスを正しく動作させるのが難しいです。 選択項目を変更すると、selectedItem値はnullのままです。私は以下のようにコンボボックスを定義しました:コンボボックスのSelectedItemは常に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; ItemsSource = "{Binding ProductTypes}"またはItemsSource = "{Binding dataContext.ProductTypes}"を挿入すると、アプリケーションがクラッシュします。だから、私はそれをどうやって行うのか分からないのですか? – Ned

+0

@Vuk 'Window'の' DataContext'をあなたのタイプに設定します。あなたのタイプの2つのプロパティは 'ProductTypes'コレクションでなければならず、' SelectedProductType'は 'ProductTypes'が返すタイプでなければなりません。したがって、 'DataContext = myType;' XAMLでは、 '{Binding ProductTypes}'と '{Binding SelectedProductType}' –

+0

@Vuk例を示すために編集された答えです。複雑な型を使用することもできますが、文字列を使用して簡単にできます。 –

関連する問題