gpt4 book ai didi

c# - UWP Master/Details 访问 MasterMenuItem

转载 作者:太空宇宙 更新时间:2023-11-03 14:50:23 25 4
gpt4 key购买 nike

我一直在尝试在加载详细信息页面后访问 MasterMenuItem 属性,但我总是收到 MasterMenuItem 为空的错误。我想做的是在 MasterPage 中选择一个项目后,我想获取该项目的 ID 以从数据库加载地址。这是我的代码:

我正在尝试填充我的“详细信息”页面中的 ListView

<ListView x:Name="MainAddressListView"
ItemsSource="{x:Bind MainAddressCollection}"/>

我的详细信息页面的代码

public ObservableCollection<Address> MainAddressCollection { get; private set; } = new ObservableCollection<Address>(); 

public Client MasterMenuItem
{
get { return GetValue(MasterMenuItemProperty) as Client; }
set { SetValue(MasterMenuItemProperty, value); }
}

public ClientViewDetailControl()
{
this.InitializeComponent();
LoadAddresses();
}

private async void LoadAddresses()
{
MainAddressCollection.Clear();

var data = await AddressDataService.GetAddressesDataAsync();

foreach (var address in data)
{
if (MasterMenuItem.Id == address.ClientId && address.ActiveStatus == 1) //This throws me an error that MasterMenuItem is null
{
if (address.IsPrimary)
MainAddressCollection.Add(address);
else
OtherAddressesCollection.Add(address);
}
}
}

我也曾尝试为此实现 Loaded 事件,但没有成功。奇怪的是其他一切都很好。例如,当我尝试用按钮填充地址时,它起作用了。

我在官方文档中找不到有关它的任何信息。

我的问题是我应该在什么情况下运行代码来填充我的地址列表,或者我应该如何处理这个问题?

编辑

这是 MasterMenuItemProperty 的一个实现:

public static readonly DependencyProperty MasterMenuItemProperty = DependencyProperty.Register("MasterMenuItem", typeof(Client), typeof(ClientViewDetailControl), new PropertyMetadata(null, OnMasterMenuItemPropertyChanged));

private static void OnMasterMenuItemPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var control = d as ClientViewDetailControl;
control.ForegroundElement.ChangeView(0, 0, 1);
}

MasterMenuItem 作为一个整体对象从 MasterView 传递到 Details View ,我可以随心所欲地使用它。我拥有的 XAML 中的绑定(bind)示例(并且可以正常工作):

<TextBlock  Text="{x:Bind MasterMenuItem.ShortName, Mode=OneWay}"

郑重声明 - 我正在使用模板 "MasterDetailsView"这是 Windows 社区工具包的一部分。

最佳答案

好的,经过一些时间和不眠之夜,我终于找到了解决方案。整个笑话是关于 MasterMenuItem 属性的定义以及它是如何被填充的(这是一件棘手的事情)。

基本上,程序尝试做的第一件事是填充 MasterMenuItem 属性(在 MasterView 中选择项目后发生),但它最终为 null。之后,它遍历代码和几页,然后再次出现在 MasterMenuItem 属性中 - 现在只有关于所选项目的实际数据。由于在 DetailsView 中调用的所有事件仅在第一次尝试用一些数据填充 MasterMenuItem 后才会触发,因此它从未奏效。

当我发现这只是一个以在它之后加载地址的方式编辑代码的问题。

MasterMenuItem 的原始实现

public Client MasterMenuItem
{
get { return GetValue(MasterMenuItemProperty) as Client; }
set { SetValue(MasterMenuItemProperty, value); }
}

MasterMenuItem 的编辑实现

public Client MasterMenuItem
{
get {
Client Property = GetValue(MasterMenuItemProperty) as Client;
if (Property != null)
LoadAddresses(Property.Id);
return Property as Client;
}
set { SetValue(MasterMenuItemProperty, value); }
}

因为这部分代码被调用了两次(第一次使用 Null 值,第二次使用选定的客户端),我必须实现 if (Property != null) 所以它只会在有实际上是一些数据,但它就像一个魅力。

谢谢大家的帮助!

关于c# - UWP Master/Details 访问 MasterMenuItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52037556/

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