2017-06-30 39 views
-1

我有一個綁定應該在多ViewModels中使用的公共屬性的問題。如何在多ViewModels中綁定公共屬性?

在我的第一個MainViewModel中,我連接到返回人員列表的數據庫。

private async void Connected() 
{ 
    try 
    { 
     base.Peoples = await DatabaseConnection.GetAllPersonsCommandAsync(); 
    } 
    catch(Exception ex) 
    { 
     MessageBox.Show(ex.Message); 
    } 
} 

在第二視圖我想顯示這些數據,通過其綁定到人民:

<ListView Width="200" 
    Margin="0 20 0 0" 
    HorizontalAlignment="Left" 
    ItemsSource="{Binding Peoples}" 
    cm:Message.Attach="[Event SelectionChanged] = [Action Peoples_SelectionChanged($source)];"> 

我結合PeoplesViewModelBase

private List<Person> _peoples; 
public List<Person> Peoples 
{ 
    get => _peoples; 
    set => OnPropertyChanged(ref _peoples, value); 
} 

我想在由ViewModelBase(如MainViewModel)繼承的其他ViewModel中使用此列表Peoples

我希望這個問題對你來說是可以理解的。

問候

==== 更新。

這是我的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); 
} 

我可以看到他們。任何suutions?

+2

哪裏是你的問題?什麼不按預期工作?你試過什麼了? –

+0

它不工作。我從'DatabaseConnection.GetAllPersonsCommandAsync();'獲取數據,但在我的視圖中沒有任何更改。 – striker

+1

向我們展示OnPropertChanged()方法中的代碼。它實際上引發了PropertyChanged事件嗎? –

回答

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); 
     } 
    } 
+0

這是很好的建議,但我不確定這是他的問題的答案。設置列表應該在此示例中正常工作。他可能看不到更新,但應該看到最初的列表。 –

+0

的ObservableCollection是不是工作壓力太大 – striker

+0

IDK他有什麼'AttachedProperty'是幹什麼的,但'名單'並重新初始化去 - 永諾覺得這是錯的'XAML'。 – Peter