2013-10-27 4 views
0

SerialNo가 DatagridComboboxColumn 인 Product, Serial No 열이있는 DataGrid가 있습니다. 제품 ID를 기반으로 제품이 동적으로 선택되면 serial No 콤보 상자를 채 웁니다. 내 XAML은 다음과 같습니다wpf datagrid : 동적으로 combobox 컬렉션을 변경합니다.

<my:DataGrid Name="dgSales" ItemsSource="{Binding}" SelectionUnit="Cell" AutoGenerateColumns="False" > 
     <my:DataGrid.Columns> 
<my:DataGridTextColumn Header="Product" Visibility="Hidden" Binding="{Binding ProductName}"></my:DataGridTextColumn> 
<my:DataGridComboBoxColumn Header="Serial No" Width="135" 
               SelectedValueBinding="{Binding SerialNo}" 
               SelectedValuePath="SlRecord_Id" 
               DisplayMemberPath="SlNum" 

               > 
    <my:DataGridComboBoxColumn.ElementStyle> 
    <Style TargetType="{x:Type ComboBox}"> 
     <Setter Property="ItemsSource" Value="{Binding}" /> 
          </Style> 
    </my:DataGridComboBoxColumn.ElementStyle> 
    <my:DataGridComboBoxColumn.EditingElementStyle> 
    <Style TargetType="{x:Type ComboBox}"> 
     <Setter Property="ItemsSource" Value="{Binding}" /> 

          </Style> 
         </my:DataGridComboBoxColumn.EditingElementStyle> 
        </my:DataGridComboBoxColumn> 
    </my:DataGrid.Columns> 
</my:DataGrid> 

내 데이터 객체는 다음과 같습니다

class clsSalesItems : INotifyPropertyChanged, IDataErrorInfo 
{ 
    private string _ProductName; 
    private string _SerialNo; 
     private ObservableCollection<ModelNos> _SerialNos; 


    public string ProductName 
    { 
     get { return _ProductName; } 
     set 
     { 
      _ProductName = value; 
      OnPropertyChanged("ProductName"); 
     } 
    } 

    public ObservableCollection<ModelNos> SerialNos 
    { 
     get 
     { 
      return _SerialNos; 
     } 
     set 
     { 
      _SerialNos = value; 
      OnPropertyChanged("SerialNos"); 
     } 
    } 
} 

내 SerialNo 클래스는 다음과 같습니다

public class ModelNos 
{ 
    private int _SlRecord_Id; 
    private string _SlNo; 

    public int SlRecord_Id 
    { 
     get { return _SlRecord_Id; } 
     set 
     { 
      _SlRecord_Id = value; 
     } 
    } 
    public string SlNum 
    { 
     get { return _SlNo; } 
     set 
     { 
      _SlNo = value; 
     } 
    } 
} 

지금 내 문제는 내가 직렬에게 더 콤보 상자 열을 채울 수 없습니다 할 때 제품이 동적으로 선택됩니다 (일련 번호는 제품마다 다릅니다). 제품을 선택할 때 시리얼을 콤보 상자에 어떻게 바인딩합니까?

답변

1

DataGrid의 SelectedItem 속성을 듣거나 그 속성을 ViewModel의 속성에 바인딩하는 것이 더 좋습니다. DataGrid에서 행을 선택하면 ViewModel의 속성 setter가 호출되고 거기에서 새 값을 확인하고이를 기반으로 SerialNos 속성을 설정할 수 있습니다. SerialNos를 설정하면 ComboBox의 ItemsSource가 새로 고쳐 졌음을 DataGrid에 알리는 PropertyChanged 이벤트가 발생합니다. DataGrid는 새로운 값으로 ComboBox를 채워 넣습니다.

순수한 View-ViewModel-Model 패턴. 이러한 문제는 MVVM을 사용하고보기에 일부 이벤트를 잡아 내지 않고 코드에서 처리하는 것으로 해결됩니다.

관련 문제