2013-01-19 2 views
2

저는 MVVM을 시작했습니다. 저는 그것에 대해 읽고 몇 가지 예를 들었습니다. 필자는 데이터베이스에서 읽은 다음 목록 상자에 채울 응용 프로그램을 만들었습니다. 선택한 항목을 다른보기에 연결 한 다음 viewModel보기에서 약간의 처리를 수행하는 데 어려움이 있습니다. 누군가가 view1 목록 상자에서 선택한 항목을 가져온 다음 올바른 항목을 출력하기 위해 view2 레이블에 올바른 방법을 설명해 주시겠습니까?뷰 모델간에 데이터를 전달하는 올바른 방법은 무엇입니까?

<local:SecondView Margin="499,30,0,20"> 
     <local:SecondView.DataContext> 
      <v:MainViewModel /> 
     </local:SecondView.DataContext> 
    </local:SecondView> 
     <Button Height="22" HorizontalAlignment="Left" Margin="8,4,0,0" Name="button1" VerticalAlignment="Top" Width="48" Command="{Binding Path=GetDataCommand}">Button</Button> 
    <ListBox ItemsSource="{Binding Path=FileData}" SelectedItem="{Binding dr}" Height="330" HorizontalAlignment="Left" Margin="149,30,0,0" Name="listBox1" VerticalAlignment="Top" Width="250" DisplayMemberPath="DDFName" /> 

이 코드 조각 내 viewModel1에 있습니다 :

private DataRowView _dr; 
    public DataRowView dr 
    { 
     get{ 
      return _dr; 
     } 

     set 
     { 
      _dr = value; 
      OnPropertyChanged("dr");} 
    } 

어떻게 든 항목 인 (DR의 새 값을 얻을 수 viewModel2를 얻으려면 여기

내 XAML입니다 view1 목록 상자에서 선택한 다음) view2에 일부 내용을 표시하고 싶습니다

미리 감사드립니다!

답변

3

ViewModel2 클래스는 행에 따라 다릅니다. - ViewModel2에 종속성을 삽입하는 한 가지 방법은 생성자에서 전달하는 것입니다.

public class ViewModel1 
{ 
    private DataRowView _dr; 
    public DataRowView dr 
    { 
     get 
     { 
      return _dr; 
     } 

     set 
     { 
      _dr = value; 
      OnPropertyChanged("dr"); 

      this.DetailView = new ViewModel2(value); //On Change of the selected Row create a new viewModel which serves as detail view 
     } 
    } 

    private ViewModel2 _DetailView; 
    public ViewModel2 DetailView 
    { 
     get 
     { 
      return _DetailView; 
     } 
     set 
     { 
      if (_DetailView != value) 
      { 
       _DetailView = value; 
       RaisePropertyChanged(() => this.DetailView); 
      } 
     } 
    } 
} 

public class ViewModel2 
{ 
    public ViewModel2(DataRowView row) 
    { 
     this.Row = row; 
    } 

    private DataRowView _Row; 
    public DataRowView Row 
    { 
     get 
     { 
      return _Row; 
     } 
     set 
     { 
      if (_Row != value) 
      { 
       _Row = value; 
       RaisePropertyChanged(() => this.Row); 
      } 
     } 
    } 
} 

하고 XAML에서 직접 상세보기로 데이터 컨텍스트를 설정할 수 있습니다

<local:SecondView Margin="499,30,0,20" DataContext="{Binding DetailView, Mode=OneWay}" /> 
+0

코드를 보내 주셔서 감사합니다! 나는 "datacontext"인 객체를 생성 한 다음 SecondView DataContext = datacontext를 설정하는 다른 방법을 찾을 수있었습니다. 그러나 당신의 방법은 더 쉬우 며, 이제 view와 viewModels간에 데이터를 전송하는 방법에 대해 분명합니다. 고마워. – BeginnerCoder

1

이 소스 코드는 객체 사이의 속성을 공유 할 수있는 방법입니다 읽고, http://sharedprop.codeplex.com을 다른 솔루션을 사용할 수 있습니다, 두 번째 객체가 활성 상태가 아닌 경우에도 작동합니다. 정보 만 확인하십시오.

관련 문제