【发布时间】:2015-05-23 07:31:09
【问题描述】:
我有两个窗口(视图),它们共享相同的视图模型。我使用一个窗口输入数据,第二个窗口根据输入窗口中一个组合框的值在 3 个不同的列表框(可观察集合)中对其进行排序。我遇到的问题是输入没有显示在列表框中。就像 observable 集合没有更新一样。
这是我在输入窗口中的代码
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}" />
这就是我的视图模型的样子
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 非常熟悉。谢谢。
【问题讨论】: