2014-09-03 5 views
0

DataGridComboBoxColumn이 내 ViewModel에 ObservableCollection<String>에 바인딩되어 있습니다. ObservableCollection에의의 드롭 다운을주는이 바인딩 작품, 내 뷰 모델에MVVM에서 WPF DataGridComboBoxColumn 바인딩?

<DataGrid Margin="5" AutoGenerateColumns="False" ItemsSource="{Binding MembershipsCollection}"> 
    <DataGrid.Columns> 
     <DataGridComboBoxColumn Header="Region" Width="SizeToHeader"> 
     <DataGridComboBoxColumn.ElementStyle> 
      <Style> 
       <Setter Property="ComboBox.ItemsSource" Value="{Binding DataContext.RegionShortCodeCollection, RelativeSource={RelativeSource AncestorType={x:Type vm:AccountsViewModel}}}" /> 
       </Style> 
      </DataGridComboBoxColumn.ElementStyle> 
      <DataGridComboBoxColumn.EditingElementStyle> 
       <Style> 
        <Setter Property="ComboBox.ItemsSource" Value="{Binding DataContext.RegionShortCodeCollection, RelativeSource={RelativeSource AncestorType={x:Type v:AccountsView}}}" /> 
       </Style> 
      </DataGridComboBoxColumn.EditingElementStyle> 
      </DataGridComboBoxColumn> 
     <DataGridTextColumn Header="ProductCode" Binding="{Binding Path=ProductCode}" Width="SizeToHeader"/>                 
     </DataGrid.Columns> 
     </DataGrid> 

& 내 ObservableCollection에 :

enter image description here

여기 내 XAML입니다.

private ObservableCollection<String> _RegionShortCodeCollection; 
    public ObservableCollection<String> RegionShortCodeCollection 
    { 
     get { return _RegionShortCodeCollection; } 
     set 
     { 
      _RegionShortCodeCollection = value; 
      OnPropertyChanged("RegionShortCodeCollection"); 
     } 
    } 
는 지금 데이터베이스 (그림에 PRODUCTCODE과 동일한 ObservableCollection<T>에서 실제 전류 값으로 셀의 값을 바인딩 할

는 현재이 분명하다 : 이것은 생성자에서 호출하는 방법에 의해 채워집니다 빈 :?.?

enter image description here

이 주위에 방법이없는 경우 같은 열이 하나 개 이상의 속성에 바인딩 할 수있는 방법, 그것은 분명 희망 덕분 경우

+0

DataGrid에 대한 ItemsSource 무엇입니까? 일반적으로 ComboBox의 SelectedItem을이 값을 보유하는 ItemsSource의 속성에 바인딩합니다. –

+0

질문 Xaml이 업데이트되었습니다. ItemSource 컬렉션 내의 항목에 바인딩하려고하면 '추가 정보 :'DeferRefresh '가 AddNew 또는 EditItem 트랜잭션 중에 예외가되지 않습니다'... – Hardgraf

+1

이것은 무엇입니까? 'RelativeSource = {RelativeSource AncestorType = {X : 유형 VM : AccountsViewModel}}'왜 않는 다른 AncestorType에 편집 스타일 바인드? – McGarnagle

답변

1

확실하지 있습니까 나는 '당신의 질문을 오해 해요,하지만 난 당신이 DataGridComboBoxColumn의 스타일을 필요가 있다고 생각하지 않습니다 - 단지 직접 ItemsSource 값을 사용합니다. (즉, 적용되는 경우 또는 SelectedValueBinding) 귀하의 질문에, 당신은 SelectedItemBinding를 사용하여 선택한 항목에 행 뷰 - 모델 속성을 결합 할 수 있어야한다 :

<DataGridComboBoxColumn Header="Region" 
    ItemsSource="{Binding DataContext.RegionShortCodeCollection, RelativeSource={RelativeSource AncestorType={x:Type v:AccountsView}}" 
    SelectedItemBinding="{Binding SelectedRegionShortCode,Mode=TwoWay}" 
/> 
+0

이 코드의 UI에 아무것도 반환되지 않습니다. 나는 기본적으로 다음 다른 옵션의 목록을 가지고 드롭 다운 메뉴를 클릭 셀의 현재 값을 보려면하기 위해 노력하고있어,이 쉬울 것이라고 생각하지만, WPF/XAML의 많은으로 매우 빠르게 매우 상세하게! 그것과 같이 RelativeSource 조회 할 수 있도록되는 DataGridColumn 시각적 트리의 일부가 아니므 – Hardgraf

+0

이다. 따라서 ElementStyle & EditingElementStyle의 필요성. –

관련 문제