gpt4 book ai didi

c# - 绑定(bind) x :Load, 更新绑定(bind)值不加载控件 (UWP)

转载 作者:行者123 更新时间:2023-11-30 16:39:46 25 4
gpt4 key购买 nike

我有一个网格元素,其 x:Load 属性绑定(bind)到页面中的一个变量:

页面.xaml

<Page>
...
<Grid x:Name="grd" x:Load="{x:Bind LoadGrid, Mode=OneWay}">

页面.xaml.cs

public sealed partial class Page : Page
...
bool LoadGrid;

OnNavigatedTo 事件处理程序接收到传递的参数后,我相应地设置了 LoadGrid 的值:

request = (Request) e.Parameter;

if (request == null)
LoadGrid = false;
else {
LoadGrid = true;
InitializeComponent(); // Tried adding this to refresh the controls.
grd.Loaded += grd_Loaded;
}

当行 grd.Loaded += grd_Loaded; 被执行时,一个 ArgumentException 被抛出:

An exception of type 'System.ArgumentException' occurred ...
Delegate to an instance method cannot have null 'this'.

我检查并发现 grd 的值为 null,即使 x:Load 属性为真且绑定(bind)模式为 OneWay(控制“检查”绑定(bind)值的更新)。

编辑

尝试 1

调用this.InitializeComponent()重新初始化控件。

尝试 2 suggested通过@touseefbsb:

使用 MVVM 方法创建用于更新属性值的事件。

尝试 3

在设置负载值后尝试了 .FindName("grd"),但没有成功。

最佳答案

Unlike in prior XAML platforms, the OnNavigated method is called before the visual tree is loaded.

因此,您可以像下面这样在页面的加载事件处理程序中注册网格的加载事件:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
var request = e.Parameter;

if (request == null)
LoadGrid = false;
else
{
LoadGrid = true;
InitializeComponent();
this.Loaded += BlankPage1_Loaded;
}
}

private void BlankPage1_Loaded(object sender, RoutedEventArgs e)
{
grd.Loaded += Grd_Loaded;
}

private void Grd_Loaded(object sender, RoutedEventArgs e)
{
Debug.WriteLine("Grd loaded.");
}

关于c# - 绑定(bind) x :Load, 更新绑定(bind)值不加载控件 (UWP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52460886/

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