共享一个viewmodel列表框的两个视图不会更新

时间:2015-05-23 07:31:09

标签: c# wpf xaml mvvm listbox

我有两个窗口(视图),它们共享相同的视图模型。我使用一个窗口输入数据,第二个窗口根据输入窗口中一个组合框的值在3个不同的列表框(observablecollections)中对其进行排序。我遇到的问题是输入没有显示在列表框中。它就像可观察的集合没有更新。

这是我在输入窗口中的代码

public partial class AddPerson : Window
{
    public NetworkViewModel MyViewModel;
    public AddPerson()
    {
        InitializeComponent();
        this.DataContext = new NetworkViewModel();
    }
}

和xaml

<TextBox x:Name="tb_firstName"  Text="{Binding Path=FirstName, Mode=TwoWay}"/>
<ComboBox x:Name="cb_group"  ItemsSource="{Binding GroupLevel}"  SelectedItem="{Binding SelectedGroupLevel}"/>

在显示窗口中,我有3个列表框

public partial class Display : Window
{
    public NetworkViewModel MyViewModel;
    public AddPerson()
    {
        InitializeComponent();
        this.DataContext = new NetworkViewModel();
    }
}

这是显示窗口的xaml

<ListBox x:Name="lb1"  GotFocus="textBox1_visible" ItemsSource="{Binding NetworkList1}" dd:DragDrop.IsDragSource="True"
     dd:DragDrop.IsDropTarget="True" SelectedItem ="{Binding Path=SelectedItemGroup, Mode=TwoWay}" />

<ListBox x:Name="lb2"  GotFocus="textBox1_visible" ItemsSource="{Binding NetworkList2}" dd:DragDrop.IsDragSource="True"
     dd:DragDrop.IsDropTarget="True" SelectedItem ="{Binding Path=SelectedItemGroup, Mode=TwoWay}" />

这是我的viewmodel的样子

public class NetworkViewModel: INotifyPropertyChanged
{

    private ObservableCollection<Person> _networkList1 = new ObservableCollection<Person>();
    public ObservableCollection<Person> NetworkList1 //Binds with the listbox
    {
        get { return _networkList1; }
        set { _networkList1 = value; } 
    }

 private string _firstName;
 public string FirstName  
    {
        get { return this._firstName; }
        set { this._firstName = value; NotifyPropertyChanged("FirstName"); }
    }
 private string _group;
 public string Group  
    {
        get { return _group; }
        set { _group = value; NotifyPropertyChanged("Group"); }
    }

 public NetworkViewModel() 
    {
        AddPersonCommand = new RelayCommand(AddPerson);
    }

 private ICommand _addPersonCommand;
 public ICommand AddPersonCommand
    {
        get { return _addPersonCommand; }
        set { _addPersonCommand = value; }
    }

 public void AddPerson(object obj)
    {
        if (SelectedGroupLevel == "Primary")
        {

             NetworkList1.Add(new Person()
            {
                FirstName = this.FirstName,
                Group = this.Group,
            });
             MessageBox.Show("Person successfully added");
        }
        else if (SelectedGroupLevel == "Secondary")
        {
             NetworkList2.Add(new Person()
            {
                FirstName = this.FirstName,
                Group = this.Group,
            });
             MessageBox.Show("Person successfully added");
        }
     }

当我点击输入窗口中的添加按钮时,我可以在消息框中看到消息,这意味着数据被添加到可观察的集合中,但我看不到它显示,希望有人可以帮助我有了这个问题。我对wpf和mvvm非常环保。感谢。

1 个答案:

答案 0 :(得分:1)

问题在于您使用视图模型的方式。您将在AddPerson视图中创建视图模型的两个单独实例,并在“显示”视图中创建一个实例。在AddPerson视图中添加项目时,它将更新自己的视图模型而不是显示视图的视图模型。

您需要一种方法,将更改从一个视图模型传递到另一个视图模型。