2016-12-07 57 views
0

在UWP項目中,我有:1頁,1個usercontrol和1個viewmodel。將ObservableCollection綁定到ItemsControls或LisView不起作用

的頁包含在窗格加載的用戶控制一個SPLITVIEW:

<SplitView.Pane> 
    <local:MyUserControl /> 
</SplitView.Pane> 

兩個頁和用戶控制具有相同的datacontext:視圖模型(稱爲MyPageViewModel)。該視圖模型對象有像一個ObservableCollection:

public ObservableCollection<MyModel> Commands { get; set; } 

在頁面上的一個按鈕單擊事件代碼隱藏,我創建了一個清單:

List<MyModel> ListCommands; 

如果我加載某些DATAS,然後我直接調用從視圖模型的方法,如:

(this.DataContext as MyPageViewModel).Load(listCommands); 

負載是在視圖模型中定義的方法,它填補了的ObservableCollection:

public void Load(List<MyModel> commands) 
    { 
     Commands = new ObservableCollection<MyModel>(commands); 
    } 

此的ObservableCollection成功加載在運行時,但在ItemsControl的用戶控制不顯示DATAS(如同沒有通知的用戶界面的變化發生),在用戶控制代碼:

<UserControl.DataContext> 
    <ViewModels:RestaurantDetailsViewModel /> 
</UserControl.DataContext> 

... 

<ItemsControl ItemsSource="{Binding Commands}" 
        Grid.Row="1" /> 

ItemsControl保持爲空(我使用DataTemplate顯示內部MyModel屬性)。我也測試了一個ListView,但結果是一樣的。

注:我的視圖模型從執行INotifyPropertyChanged的自定義類繼承:提前

public class MyPageViewModel : BindabelBase 

public abstract class BindableBase : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    public void RaisePropertyChanged([CallerMemberName]string propertyName = null) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    public void Set<T>(ref T storage, T value, [CallerMemberName()]string propertyName = null) 
    { 
     if (!object.Equals(storage, value)) 
     { 
      storage = value; 
      this.RaisePropertyChanged(propertyName); 
     } 
    } 
} 

感謝,

問候

+1

ViewModels INotifyProperty實現呢? – RTDev

+0

對不起,我編輯了這個遺漏的細節。 – ArthurCPPCLI

+1

ok,所以你有INotifyImplemented,但沒有使用;)嘗試 - 私人ObservableCollection _commands;公共ObservableCollection 命令{ger {return _commands;} set {_commnads = value; RaisePropertyChanged( 「命令」); } – RTDev

回答

0

感謝所有快速解答,問題就解決了。

我的錯誤是爲頁面和用戶控件重新聲明DataContext tat創建了ViewModel的新實例(=數據上下文對於頁面和用戶控件,兩個différents實例不相同)。

的解決方案是,以指示頁的的DataContext像這樣的用戶控件:

<local:MyUserControl DataContext="{Binding DataContext, ElementName=CommandesPage}" /> 

其中CommandesPage是頁面的名稱。

相關問題