我有两个窗口(视图),它们共享相同的视图模型。我使用一个窗口输入数据,第二个窗口根据输入窗口中一个组合框的值在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非常环保。感谢。
答案 0 :(得分:1)
问题在于您使用视图模型的方式。您将在AddPerson视图中创建视图模型的两个单独实例,并在“显示”视图中创建一个实例。在AddPerson视图中添加项目时,它将更新自己的视图模型而不是显示视图的视图模型。
您需要一种方法,将更改从一个视图模型传递到另一个视图模型。