2016-08-22 1 views
0

DataGrid가 포함 된 UserControl을 디자인하고 있습니다. 에 바인드 할 최선의 노력에도 불구하고 DataGrid에 행이 표시되지 않습니다. UserControl을 포함WPF 사용자 정의 컨트롤 내에서 DataGrid의 ItemsSource를 바인딩 할 수 없습니다.

  1. 창 :

    여기 바인딩의 기본 흐름이다.

  2. 창보기 모델에는 사용자 정의 컨트롤을 위해 디자인 된 뷰 모델의 인스턴스가 포함되어 있습니다.
  3. 종속성 속성을 통해 UserControl의 ViewModel을이 viewmodel에 바인딩합니다.
  4. 그러면 DataGrid가 뷰 모델 내부의 관찰 가능 컬렉션에 바인딩되지만 아무 것도 표시되지 않습니다.

코드 (XAML과 VB.Net) :

모든 창 컨트롤에 바인더 제본 창보기 모델 :

Public Class WindowVM 
    ... 
    Public Property UserControlViewModel as New UserControlVM 
End Class 

창 XAML :

<local:MyUserControl ViewModel="{Binding UserControlViewModel, Mode=OneWay}"/> 

사용자 제어 코드 :

Public Shared ReadOnly ViewModelProperty As DependencyProperty = DependencyProperty.Register("ViewModel", GetType(UserControlVM), GetType(MyUserControl), New PropertyMetadata(Nothing)) 
... 
Public Property ViewModel As UserControlVM 
    Get 
     Return CType(Me.GetValue(ViewModelProperty), UserControlVM) 
    End Get 
    Set(value As UserControlVM) 
     Me.SetValue(ViewModelProperty, value) 
    End Set 
End Property 
.... 
Public Class UserControlVM 
    Public Property RunItems As New ObservableCollection(Of RunVM) 
End Class 

사용자 제어 XAML, 데이터 그리드 바인딩 :

<DataGrid DataContext="{Binding ViewModel}" 
    ItemsSource="{Binding RunItems}" ... 

은 많은 단계를 보이지만 내 지식이하여 DataGrid에 바인딩 뱀에 대한 올바른 MVVM의 방법입니다. 지금까지 아무것도.

+0

인가? – ViVi

+0

예 vb.net이 질문을 편집합니다 – Tekito

+0

좋은 결과를 얻었습니다. – ViVi

답변

0

내가 해결했을 수도 있습니다. DataGridDataContextUserControl을 가리킬 필요가있었습니다.

그냥 간단 감독 : 그것은 VB.NET 코드

<DataGrid DataContext="{Binding ViewModel, RelativeSource={RelativeSource AncestorType=UserControl}}" 
ItemsSource="{Binding RunItems}"