gpt4 book ai didi

wpf - WPF中的强制绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 15:24:33 25 4
gpt4 key购买 nike

我正在编写测试来检查 Binding 的正确性XAML 中指定的元素。他们到目前为止工作,唯一的问题是我不知道如何正确地强制数据绑定(bind)发生。令人惊讶的是,仅仅在 DataContext 中设置一些内容是不够的。 ,在您显示控件/窗口之前不会发生绑定(bind)。请不要说我正在编写“单元”测试,并且我想避免显示任何窗口。

看看下面的代码:

// This is main class in console application where I have all WPF references added
public class Program
{
[STAThread]
public static void Main()
{
var view = new Window();
BindingOperations.SetBinding(view, Window.TitleProperty, new Binding("Length"));
view.DataContext = new int[5];
//view.Show(); view.Close(); // <-- this is the code I'm trying not to write
Console.WriteLine(view.Title);
}
}

在这里,我正在创建一个 Window 并将一个数组作为 DataContext到那个窗口。我正在绑定(bind) Window.TitleArray.Length所以我希望看到数字 5打印在控制台中。但是直到我 Show窗口(注释行)我会得到空字符串。如果我取消注释该行,那么我将收到所需的 5在控制台输出中。

有什么方法可以在不显示窗口的情况下进行绑定(bind)?在启动测试时查看大约 20 个窗口非常烦人。

P.S.:我知道我可以让 window 更透明等等,但我正在寻找更优雅的解决方案。

更新 上面的代码是我真正拥有的简化版本。在实际代码中,我收到 View (一些 UIElement 带有绑定(bind))和 object ViewModel .我不知道在 View 上设置了哪个确切的绑定(bind)。 ,但我仍然希望所有这些都被初始化。

更新 2 : 回答关于我测试什么以及为什么测试的问题。我不打算测试像 Binding 这样的类, BindingBase等按预期工作,我认为他们正在工作。我正在尝试在我的所有 XAML 文件中测试我是否正确编写了绑定(bind)。因为绑定(bind)是字符串类型的东西,所以它们在编译期间不会被验证,默认情况下它们只会在输出窗口中导致错误,我偶尔会错过。因此,如果我们从上面举我的例子,如果我们在绑定(bind)中打错: {Binding Lengthhh}那么我的测试将通知您没有名称为 Lengthhh 的属性可用于绑定(bind)。所以我有大约 100 个 XAML 文件,对于每个 XAML,我都有一个测试(3-5 行代码),在启动我的测试后我知道 肯定的我的解决方案中没有绑定(bind)错误。

最佳答案

绑定(bind)由调度程序使用 DispatcherPriority.DataBind 更新 - 因此,如果您等待具有 SystemIdle 优先级的虚拟任务,您可以确定任何挂起的数据绑定(bind)都已完成。

  try
{
this.Dispatcher.Invoke(DispatcherPriority.SystemIdle, new Action(() => { }));
}
catch
{
// Cannot perfom this while Dispatcher in suspended mode
}

关于wpf - WPF中的强制绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5396805/

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