2010-10-01 49 views
2

哎延遲。我試圖維護一個MVVM模型,但當試圖綁定到一個列表框時跳到某處。我第一次運行該應用程序時,我將ItemCatalog(ObservableCollection)設置爲某個ObservableCollection列表。列表框是空的,但如果我再試一次就行了。但是,數據源與顯示的數據之間存在滯後。例如,列表框結合 - 通過一個源

我加載應用程序 - >設置源X - >列表框爲空

我現在設置源Y - >列表框顯示X

我設置源Z - >列表框顯示Y等。

這對我來說,意味着正在工作的結合,但我想不出爲什麼它是由一個滯後。

我XAML看起來像這樣:

<ListBox ItemsSource="{Binding ItemCatalog}"> 
     <DataTemplate> 
      <StackPanel Margin="0,0,0,17" Width="432"> 
        <TextBlock Text="{Binding Ref}" TextWrapping="Wrap" Foreground="Black" /> 
        <TextBlock Text="{Binding ItemName}" TextWrapping="Wrap" Margin="12,-6,12,0" Foreground="Black" /> 
      </StackPanel> 
     </DataTemplate> 
</ListBox> 

在視圖模型,的ItemCatalog值基於哪個按鈕,用戶按下(XYZ),其全部被存儲在一個靜態變量。是否有理由拖延,或迫使它重新綁定到最新的價值?

如果我刪除從XAML的約束力,從直線設置列表框的源代碼隱藏,它完美的作品。但是,我想嘗試並維護XAML編碼。我是MVVM的新手,所以我可能會這樣做是錯誤的。感謝

編輯 - 額外的代碼

的代碼在的OnNavigatedTo方法

 protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) 
     { 


      if (NavigationContext.QueryString["Category"].ToString() == "House") 
      { 
       _categoryType = Models.House; 

      } 
      if (NavigationContext.QueryString["Category"].ToString() == "Car") 
      { 
       _categoryType = Models.Car; 

      } 

      MyViewModel.LoadNewData(_categoryType); 


      base.OnNavigatedTo(e); 
     } 

LoadNewData方法只是設置基於傳遞的參數的靜態變量發生變化。

ItemCatalog = App.CarCatalog; 

本質上,我需要通過XAML加載頁面後重新綁定。

回答

3

在猜測(因爲仍然沒有足夠的代碼繼續),您的ViewModel甚至在實際分配了實際分配了ItemCatalog的字段之前引發了屬性更改。例如: -

ObservableCollection<Stuff> _ItemCatalog; 
ObservableCollection<Stuff> ItemCatalog 
{ 

    get { retutn _ItemCatalog; } 
    set 
    { 
     PropertyChanged("ItemCatalog"); 
     _ItemCatalog = value; 
    } 
} 

這可能會導致您描述的行爲。

+0

這是在黑暗中拍攝的絕佳選擇! :D我移動了NotifyPropertyChange方法,並在視圖中,我把DataContext放在ViewModel的'PropertChanged'事件中。我認爲DataContext只需要設置一次,但似乎每次引發PropertyChange事件時都必須對其進行設置。謝謝! – XSL 2010-10-01 20:03:46

0

你不顯示你在哪裏改變從X源到y的任何代碼,但我將從解釋行爲假設這種變化正在發生前的數據對你的看法結合被解釋。

+0

更新了一些代碼的問題。 – XSL 2010-10-01 18:42:58

+0

是ItemCatalog和ObservableCollection? – Roadie57 2010-10-01 20:00:22

+0

我設法解決它(檢查接受的答案),但是,ItemCatalog是一個ObservableCollection。 – XSL 2010-10-01 20:50:20