привязка OneWay также требовала, чтобы свойство использовало интерфейс INotifyPropertyChanged .
Прежде всего, LoadGrid должно быть свойством, а непросто поле, подобное следующему
public bool LoadGrid {get; set;}
, после этого вам нужно реализовать INotifyPropertyChanged, который лучше всего использовать с ViewModel (MVVM pattren)
, чтобы создать ViewModel класс с реализацией.
public class PageViewModel : INotifyPropertyChanged
{
private bool loadGrid;
public event PropertyChangedEventHandler PropertyChanged = delegate { };
public bool LoadGrid
{
get { return this.loadGrid; }
set
{
this.loadGrid = value;
this.OnPropertyChanged();
}
}
public void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
// Raise the PropertyChanged event, passing the name of the property whose value has changed.
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
после этого создайте на вашей странице свойство типа PageViewModel , например:
public PageViewModel vm {get;set;} = new PageViewModel ();
, затем в вашем методе OnNavigatedTo () вы можете установить свойство так, как вам нужно.и вам не нужно снова вызывать InitializeComponent для обновления чего-либо.
if (request == null)
vm.LoadGrid = false;
else {
vm.LoadGrid = true;
grd.Loaded += grd_Loaded;
}
Последнее изменение, которое вам нужно сделать, это небольшое изменение в xaml, просто связать vm.LoadGrid вместо LoadGrid, как показано ниже:
<Grid x:Name="grd" x:Load="{x:Bind vm.LoadGrid, Mode=OneWay}">
подробнее о привязке данных в глубину: https://docs.microsoft.com/en-us/windows/uwp/data-binding/data-binding-in-depth