我遇到了绑定应在多个ViewModel中使用的公共属性的问题。
在我的第一个MainViewModel中,我正在连接到返回人员列表的数据库。
private async void Connected()
{
try
{
base.Peoples = await DatabaseConnection.GetAllPersonsCommandAsync();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
在第二个视图中我希望通过将这些数据绑定到Peoples来显示这些数据:
<ListView Width="200"
Margin="0 20 0 0"
HorizontalAlignment="Left"
ItemsSource="{Binding Peoples}"
cm:Message.Attach="[Event SelectionChanged] = [Action Peoples_SelectionChanged($source)];">
我将Peoples
绑定到ViewModelBase
:
private List<Person> _peoples;
public List<Person> Peoples
{
get => _peoples;
set => OnPropertyChanged(ref _peoples, value);
}
我想在ViewModelBase继承的其他ViewModel中使用此Peoples
列表(如MainViewModel)。
我希望这个问题对你来说是可以理解的。
问候
==== 更新
这是我的OnPropertyChanged方法:
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged<T>(ref T property, T value, [CallerMemberName]string propertyName = "")
{
property = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
===== 第二次更新
我测试了一些东西,当我创建这样的新人时:
private ObservableCollection<Person> _peoples = new ObservableCollection<Person>{
new Person("aa", "aa", 1, 1)
};
public ObservableCollection<Person> Peoples
{
get => _peoples;
set => OnPropertyChanged(ref _peoples, value);
}
我可以看到他们。任何淤泥?
答案 0 :(得分:1)
请使用ObservableCollection<Person>
填充更改。也不要重新初始化它 - 而是使用Clear()
和Add()
。您现在还可以使用CollectionChanged
事件。
如果这不起作用 - 请尝试检查您的DataContext
是否正确。
请这样:
public ObservableCollection<Person> Peoples
{
get;
}
public MyConstructor()
{
Peoples = new ObservableCollection<Person>();
}
public void RefreshPeopleCollection(IEnumerable<Person> persons)
{
Peoples.Clear();
foreach(var person in persons)
{
Peoples.Add(person);
}
}