2013-01-19 45 views
2

我刚刚开始使用MVVM,并一直在阅读并做一些示例。我设法创建了一个应用程序,它将从数据库中读取数据,然后填充到列表框中。我很难尝试将所选项链接到另一个视图,然后在该视图viewModel中执行一些处理。请有人向我解释从view1列表框中获取当前选定项目然后在view2标签上输出所选项目的正确方法?在视图模型之间传递数据的正确方法是什么?

这是我的XAML:

<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");} 
    } 

我想以某种方式获得viewModel2获得博士的新值(这是该项目在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可以在DataContext直接设置到详细视图:

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

感谢您的代码!我设法找到了另一种方法,我创建了一个“datacontext”对象,然后设置了我的SecondView DataContext = datacontext。但你的方式更容易,现在我清楚如何在视图和视图模型之间传输数据。感谢Mil! – BeginnerCoder

1

你可以使用其他的解决方案,http://sharedprop.codeplex.com,阅读源代码是对象之间共享属性的方式,并且如果第二个对象不活动,也可以工作...检查信息

相关问题