我刚刚开始使用 MVVM,我一直在阅读它并做了一些示例。我设法创建了一个应用程序,该应用程序将从数据库中读取,然后填充到列表框中。我很难尝试将所选项目链接到另一个 View ,然后在该 View 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 获得 dr 的新值(这是在 view1 列表框中选择的项目),然后在 view2 上我想显示一些细节
提前致谢!
最佳答案
您的 ViewModel2 类取决于 Row --> 在 ViewModel2 中注入(inject)依赖项的一种可能性是通过构造函数传递它。
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 中,您可以将数据上下文直接设置为详细 View :
<local:SecondView Margin="499,30,0,20" DataContext="{Binding DetailView, Mode=OneWay}" />
关于wpf - 在 View 模型之间传递数据的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14412405/