Wpf MVVM打开2个或更多视图进行比较

时间:2017-05-29 12:50:46

标签: wpf mvvm data-binding view

我有一个ListView,我希望相互比较不同的观点。但是当我在object中选择另一个ListView时,它会覆盖之前选定的object

看到这张图片:

preview

我将MVVMDataBinding一起使用,所以它与我想的有关,现在你怎么能修复'这个。因为我现在不知道。

我希望清楚我尝试做什么或想做什么?

XAML部分

 <ListView Grid.Row="3"
           ItemsSource="{Binding PersonList}"
           SelectedItem="{Binding SelectedPerson}">

视图模型:

    private Person _SelectedPerson;
    public Person SelectedPerson
    {
        get
        {
            return _SelectedPerson;
        }
        set
        {
            _SelectedPerson = value;

            Messenger.Default.Send(SelectedPerson);

            PersonDetailView personDetailView = new PersonDetailView();
            personDetailView.Show();

            _SelectedPerson = null;
            RaisePropertyChanged("SelectedPerson");
        }
    }

我是否还需要创建DetailViewModel的新实例?

PersonDetailViewModel:

    public PersonDetailViewModel(IPersonDataService iPersonDataService)
    {
        _IPersonDataService = iPersonDataService;

        Messenger.Default.Register<Person>(this, (selectedPerson) =>
        {
            SelectedPerson = selectedPerson;
        });
    }

    private Person _SelectedPerson;
    public Person SelectedPerson
    {
        get
        {
            return _SelectedPerson;
        }
        set
        {
            _SelectedPerson = value;
            RaisePropertyChanged("SelectedPerson");
        }
    }

1 个答案:

答案 0 :(得分:1)

为什么不做这样的事情?因此,您始终可以通过object重新推荐ListView并将Person绑定到View

public class PersonDetailViewModel
{
    public Person Person { get; }

    public PersonDetailViewModel(Person person)
    {
        Person = person;
    }
}

创建PersonDetailViewModel

PersonDetailViewModel personDetailView = new PersonDetailViewModel(value);
personDetailView.Show();

或(如果您订阅&#34; DoubleCLick event&#34;例如)

PersonDetailViewModel personDetailView = new PersonDetailViewModel(listBox.SelectedItem as Person);
personDetailView.Show();

我之前从未使用Messenger