2015-01-01 3 views
0

저는 수많은 블로그에서 예제를 단순화하기 위해 POC를 만들었습니다. 여하튼, 내가 무엇을 놓치고 있는지 보지 못한다.보기 모델에 데이터를 공급하는 방법은 무엇입니까?

이 XAML 구조가 있으며 뷰 모델의 텍스트 블록 내용을 알파으로 바인딩했습니다.

<Window ... > 
    <Window.DataContext> 
    <local:ViewModel></local:ViewModel> 
    </Window.DataContext> 
    <Grid> 
    ... 
    <DataGrid ...> 
     <DataGrid.Columns> 
     <DataGridTemplateColumn> 
      <DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <TextBlock Text="{Binding Alpha}"></TextBlock> 
      </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 
    </Grid> 
</Window> 

보기 모델은 매우 간단하며 현재는 하나의 속성으로 만 구성됩니다.

class ViewModel 
{ 
    public String Alpha { get; set; } 
} 

물론 뷰 모델에 데이터를 입력해야합니다. 그래서 저는 가짜 값에 대한 간단한 getter를 만들었습니다.

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
    InitializeComponent(); 
    } 

    private static IEnumerable<String> GetFakes() 
    { 
    yield return "beep"; 
    yield return "boop"; 
    } 
} 

내가 어떻게 공급 뷰 모델이 데이터의 명확한 예를 발견하지 않았습니다 (또는 만드는 방법 뷰 모델은 데이터를 가져 ). 표시 할 데이터는 정적이며 첫 번째 위치에서는 변경되지 않으므로 모든 정보가 초기화에서 이미 준비되었으므로 어떤 고지도자가 필요하지 않습니까?

답변

0

YOu에는 하위보기 모델의 목록을 보유하는 기본보기 모델이 있어야합니다. 귀하의 데이터 그리드에서

class MainViewModel 
{ 
    public ObservableCollection<DataGridRowViewModel> Items 
    { 
     get; 
     set; 
    } 

    public MainViewModel(){ 
     Items = new ObservableCollection<DataGridRowViewModel>{ 
      new DataGridRowViewModel("Beep"), 
      new DataGridRowViewModel("Meep") 
     }; 
    } 
} 

class DataGridRowViewModel 
{ 
    public string Alpha {get;set;} 

    public DataGridRowViewModel(string alpha){ 
     Alpha = alpha; 
    } 
} 

, 당신은 ItemsSource를 참조 Items 재산에 결합한다.

<Window ... > 
    <Window.DataContext> 
    <local:MainViewModel/> 
    </Window.DataContext> 
    <Grid> 
    ... 
    <DataGrid ... ItemsSource="{Binding Items}"> 
     <DataGrid.Columns> 
     <DataGridTemplateColumn> 
      <DataGridTemplateColumn.CellTemplate> 
      <DataTemplate> 
       <-- This DataTemplate applies TO DataGridRowViewModel --> 
       <TextBlock Text="{Binding Alpha}"></TextBlock> 
      </DataTemplate> 
      </DataGridTemplateColumn.CellTemplate> 
     </DataGridTemplateColumn> 
     </DataGrid.Columns> 
    </DataGrid> 
    </Grid> 
</Window> 
+0

내가 바로 것을 가지고있는 경우의 검증 보자. 내 단순화 된 예제에 적용하려면 (분명히 더 큰 생성의 일부 임) 뷰 모델 클래스에는 메소드가 있어야합니다. * LoadStuff() *. 그 방법에서 우리는 * Alpha * 속성을 ... 정확히 무엇으로 설정합니까? 나는 이것이 나를위한 걸림돌이라고 생각한다. ** 배열 ** 문자열을 얻을 수 있지만 어떻게 든 그 정보를 뷰 모델에 전달해야합니다. 그러나 그것은 어레이를 개별 조각으로 "절단"해야합니다. 당신의 예제에서 (* T [] * to * T *, * T *, * T * 등등) 그 연결은 어디에서 발생합니까? –

+0

@KonradViltersten; 답변을 업데이트했습니다. 그것이 더 합리적인 지보십시오. –

관련 문제