Я пытался получить доступ к свойству MasterMenuItem после загрузки страницы сведений, но всегда получаю сообщение об ошибке, что MasterMenuItem пуст.
То, что я пытаюсь сделать, это после выбора элемента в MasterPage, я хочу получить идентификатор элемента для загрузки адресов из базы данных. Вот мой код:
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 для этого, но безуспешно. Странно то, что все остальное работает просто отлично. Когда я пытаюсь заполнить адреса кнопкой, например, это работает.
Я не смог найти никакой информации об этом в официальной документации.
У меня вопрос, в каком случае мне следует запускать код для заполнения моего списка адресов или как мне подойти к этому?
EDIT
Вот дополнение к 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 Community Toolkit.