【发布时间】:2011-04-20 00:21:33
【问题描述】:
嘿。我正在尝试维护 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>
在 ViewModel 中,ItemCatalog 的值取决于用户按下的按钮(X、Y、Z),它们都存储在静态变量中。是否有延迟的原因,或者有办法强制它重新绑定到最新的ItemCatalog 值?
如果我从 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 重新绑定。
【问题讨论】:
标签: c# silverlight data-binding mvvm windows-phone-7