gpt4 book ai didi

c# - 列表框绑定(bind) - 由一个来源延迟

转载 作者:行者123 更新时间:2023-11-30 22:43:41 27 4
gpt4 key购买 nike

嘿。我正在尝试维护 MVVM 模型,但在尝试绑定(bind)到列表框时在某处绊倒了。第一次运行该应用程序时,我将 ItemCatalog (ObservableCollection) 设置为某个 ObservableCollection 列表。列表框是空的,但如果我再试一次它就可以了。但是,数据源和显示的数据之间存在滞后。例如,

我加载应用程序 -> 将源设置为 X -> 列表框为空

我现在将源设置为 Y -> 列表框显示 X

我将源设置为 Z -> 列表框显示 Y 等。

对我来说,这意味着绑定(bind)有效,但我不明白为什么它会滞后一个。

我的 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 的值基于用户按下的按钮(XYZ),它们都存储在一个静态变量中。是否有延迟的原因,或强制它重新绑定(bind)到最新的 ItemCatalog 值的方法?

如果我从 XAML 中删除绑定(bind)并直接从代码隐藏设置列表框源代码,它会完美运行。但是,我想尝试维护 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 重新绑定(bind)。

最佳答案

猜测(因为仍然没有足够的代码可以继续)您的 ViewModel 甚至在字段支持 ItemCatalog 实际分配之前就引发了属性更改。像这样的东西:-

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

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

这可能会导致您描述的行为。

关于c# - 列表框绑定(bind) - 由一个来源延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3842056/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com