4

我刚刚开始使用 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 获得 dr 的新值(这是在 view1 列表框中选择的项目),然后在 view2 上我想显示一些细节

提前致谢!

4

2 回答 2

3

您的 ViewModel2 类取决于 Row --> 在 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}" />
于 2013-01-19T11:36:46.120 回答
1

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

于 2013-09-19T13:40:44.573 回答