【发布时间】:2019-02-01 21:19:03
【问题描述】:
加载详细信息页面后,我一直在尝试访问 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 视图,然后我可以随意使用它。我拥有的 XAML 中的绑定示例(并且可以正常工作):
<TextBlock Text="{x:Bind MasterMenuItem.ShortName, Mode=OneWay}"
作为记录 - 我正在使用模板 "MasterDetailsView",它是 Windows 社区工具包的一部分。
【问题讨论】:
-
嗨,这是
MasterMenuItemProperty? -
您将 MasterMenuItem 绑定到哪里?您在
MasterDetailsView上有一个SelectionChanged事件。为什么不使用它来获取选定的项目? -
@Stefan 查看我编辑的问题
-
@AVK 我会调查一下,谢谢
标签: c# uwp master-detail windows-community-toolkit