哎延遲。我試圖維護一個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
值基於哪個按鈕,用戶按下(X
,Y
,Z
),其全部被存儲在一個靜態變量。是否有理由拖延,或迫使它重新綁定到最新的價值?
如果我刪除從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加載頁面後重新綁定。
這是在黑暗中拍攝的絕佳選擇! :D我移動了NotifyPropertyChange方法,並在視圖中,我把DataContext放在ViewModel的'PropertChanged'事件中。我認爲DataContext只需要設置一次,但似乎每次引發PropertyChange事件時都必須對其進行設置。謝謝! – XSL 2010-10-01 20:03:46