【问题标题】:How to Delay XAML Binding until after Loaded如何延迟 XAML 绑定直到加载后
【发布时间】:2011-09-23 21:11:36
【问题描述】:

看看这个:

<ItemsControl ItemsSource="{x:Static local:Cache.Colors}" />

这会将 ItemsControl 绑定到名为 List 的静态属性。在这种情况下,Colors 属性是名为 Cache 的类的一部分。

但是有一个问题。当您以这种方式绑定时,Colors 属性会在 Initialize 方法期间被调用,在应用程序中建立安全之前。

由于尚未建立安全性,因此调用颜色会导致异常,因为安全性是成功调用数据服务的必要条件。

该解决方案将其从 XAML 移至代码后面,并确保它在 Loaded 事件中执行,而不是在 Initialize 期间在构造函数中执行。

这里真正的问题是,我想在 XAML 中执行此操作。有可能吗?

【问题讨论】:

  • 为什么不能在打开窗口之前或者在窗口的构造函数中调用InitializeComponent()之前“初始化安全”?
  • 这是主窗口。我想我可以创建 PreMainWindow。
  • 那又怎样?您可以在 App.xaml 中拥有在创建窗口之前调用的代码,或者在实际读取 XAML 之前在 MainWindow 的构造函数中拥有代码。

标签: wpf xaml binding


【解决方案1】:

我的解决方案是先在 App.xaml.cs 中运行它。

【讨论】:

    【解决方案2】:

    我通常通过绑定 ItemsSource 来实现 INotifyCollectionChanged 接口来解决这个问题。在初始化时,项目源将为空,然后在加载时填充项目源。项目源的填充引发集合更改事件,导致您的项目控件重新绑定/添加源中的新项目。

    【讨论】:

    • 这不起作用,因为 Collection 属性将失败并且永远不会引发 Changed 事件,因为 Binding 认为它处于错误状态。
    • 您能发布您的 XAML 并查看模型吗?使用通知项目源不应引发错误。
    猜你喜欢
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多