2011-12-21 5 views
0

Silverlight 4에서 작업 중이므로 제대로 작동하지 못합니다. 선택한 항목을 변경하면 selectedItem 값이 null로 유지됩니다. 나는 다음과 같이 콤보 박스를 정의했다 :SelectedItem for 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; ItemsSource = "{Binding ProductTypes}"또는 ItemsSource = "{Binding dataContext.ProductTypes}"를 삽입하면 응용 프로그램이 충돌합니다. 그래서 어떻게 할 지 모르겠다. – Ned

+0

@Vuk'Window'의'DataContext'를 당신의 타입으로 설정하십시오. 타입의 두 속성은 Collection이어야하는'ProductTypes'과'ProductTypes'가 반환하는 타입이어야하는'SelectedProductType'이어야합니다. 그래서'DataContext = myType;'XAML에서 {Binding ProductTypes}와 {Binding SelectedProductType} –

+0

@Vuk 예제를 제공하기 위해 수정 된 답변; 복잡한 유형을 사용할 수도 있지만 String을 사용하여 간단하게 만들 수 있습니다. –

관련 문제