Как обновить sh DataGrid в приложении xaml / uwp
Вы можете использовать событие NetworkHelper
NetworkChanged, чтобы определить состояние сети, а затем сделать состояние сети отметьте текущее значение DataContext
и привяжите его к свойству DataGridTextColumn
Binding
.
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string PropertyName = null)
{
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(PropertyName));
}
private bool _isConnected;
public bool IsConnected
{
get
{
return _isConnected;
}
set
{
_isConnected = value;
OnPropertyChanged();
}
}
NetworkHelper.Instance.NetworkChanged += Instance_NetworkChanged;
private async void MainPage_Loaded(object sender, RoutedEventArgs e)
{
if (NetworkHelper.Instance.ConnectionInformation.IsInternetAvailable)
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
IsConnected = true;
});
}
}
private async void Instance_NetworkChanged(object sender, EventArgs e)
{
if (NetworkHelper.Instance.ConnectionInformation.IsInternetAvailable)
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
IsConnected = true;
});
}
else
{
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
IsConnected = false;
});
}
}
код Xaml
<controls:DataGrid
x:Name="MyDataGrid"
......
>
<controls:DataGrid.Columns>
<controls:DataGridTextColumn
Width="*"
Binding="{Binding ElementName=MyDataGrid, Path=DataContext.IsConnected, Mode=TwoWay}"
FontSize="25"
Header="ID"
Tag="Id"
Visibility="Visible"
/>
Обратите внимание
мы не можем использовать его следующим образом, потому что он не может получить доступ к root DataContext
со второго уровня DataTemplate
.
<controls:DataGridTemplateColumn>
<controls:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock x:Name="Test" Text="{Binding Id}" />
<Button Content="Flag" IsEnabled="{Binding ElementName=MyDataGrid, Path=DataContext.IsConnected, Mode=TwoWay}" />
</StackPanel>
</DataTemplate>
</controls:DataGridTemplateColumn.CellTemplate>
</controls:DataGridTemplateColumn>