gpt4 book ai didi

wpf - 在 View 模型之间传递数据的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-04 14:22:30 25 4
gpt4 key购买 nike

我刚刚开始使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com