C# 数据何时绑定?如何加快绑定速度?
在代码中,我看到在视图的构造函数中,我将DataContext设置为视图模型的一个新实例。走进它,我可以看到现场的东西已经设置好了。回到视图的构造函数,我可以验证视图模型的属性是否已设置,元素的计数是否正确 然后。。。(我们马上回到这里) 最后,我可以看到呈现的GUI,其中视图模型生成的数据按预期显示。一切都按计划进行了。现在,我只需要将网格的第一行设置为选中,这应该不是问题,因为我知道数据在那里(通过进入模型视图的构造函数进行验证,观察数据上下文的字段和实际窗口的内容) 但是没有。。。(现在,让我们回到前面提到的地方) 当我在构造器中研究网格的DataItems属性时,我发现其中没有元素。因为我在屏幕上看到了这些,我知道它们必须以某种方式到达那里,但是显然,视图模型的属性内容的绑定发生在构造函数运行之后 我希望在构造函数中执行绑定(如果这是最合适的方法)。作为B计划,我正在考虑对一些事件(比如Blopp_OnDataBound(…)或其他什么)做出反应,但除了这些,我什么也没发现。我已将TargetUpdated=“TheGriddy\u OnTargetUpdated”放在数据源绑定的旁边,但该方法不调用 注意。即使我是在一个特定的控件上做这件事,我相信这个问题通常适用于任何控件,因为它是关于XAML/WPF的数据绑定范例的。如果我错了,请纠正我。(我在Infragistics的XamDataGrid上,但这种行为很可能是好的、旧的、普通的DataGrid可以复制的。) 根据要求,我还提供了一个小样本,我以前没有选择,因为我认为它没有任何帮助。我被纠正了C# 数据何时绑定?如何加快绑定速度?,c#,wpf,xaml,data-binding,datagrid,C#,Wpf,Xaml,Data Binding,Datagrid,在代码中,我看到在视图的构造函数中,我将DataContext设置为视图模型的一个新实例。走进它,我可以看到现场的东西已经设置好了。回到视图的构造函数,我可以验证视图模型的属性是否已设置,元素的计数是否正确 然后。。。(我们马上回到这里) 最后,我可以看到呈现的GUI,其中视图模型生成的数据按预期显示。一切都按计划进行了。现在,我只需要将网格的第一行设置为选中,这应该不是问题,因为我知道数据在那里(通过进入模型视图的构造函数进行验证,观察数据上下文的字段和实际窗口的内容) 但是没有。。。(现在,
public MyView()
{
InitializeComponent();
DataContext = new MyViewModel();
if (xamDataGrid.DataSource != null)
throw new HappyException("yes!");
}
private void SomeMethod()
{
if (xamDataGrid.DataSource != null)
throw new HappyException("yes!");
}
问题是,该异常从未在构造函数中抛出,而是
在方法上。数据源设置为绑定,所以绑定必须在构造函数运行之后发生,对吗
我需要选择第一行。这可以在第一行存在时完成…数据绑定似乎在第一次显示窗口时的
LayoutUpdated
事件期间发生。我认为B计划是目前为止唯一可行的办法。使用线程中提到的TargetUpdated
事件,但是请注意,您需要显式地启用NotifyOnTargetUpdated
,否则它将不会触发(正如您已经看到的) 我读了两遍你的问题,但我仍然无法理解情况的复杂性。我知道这是一个很大的工作,但是安在这里真的很有帮助。另外,我认为一个带有一些注释的代码片段将有助于理解您的问题-我们编写代码而不是文献:-)@Heinzi我添加了一些示例。“也许这有助于澄清我的问题。”德拉普按要求回答。享受。:)你认为TargetUpdated与Loaded有什么关系(当然,如果我在那里做同样的事情的话)?它会不会不那么受欢迎?我将只在用户加载视图时执行该操作,而不是在他们稍后处理该操作时执行。@KonradViltersten当然,您可以使用Loaded,但TargetUpdated IMO更好,因为它会在每次重新绑定时触发(当然,如果您这样做的话)。但是如果你只需要这些,一定要先使用Loaded-TargetUpdated fires,然后再使用Loaded。