Теперь вторая сетка данных имеет высоту 5 строк. Я делаю это, добавив эту команду в метод наступления в коде:
Код: Выделить всё
passwordGrid.HeightRequest = passwordGrid.HeaderRowHeight + passwordGrid.RowHeight * 5;Теперь, когда я изначально выбираю категорию из первой сетки данных, которая содержит 5 элементов, элементы отображаются в сетке 2 без проблем. Я выбираю вторую категорию - отключенная вертикальная полоса прокрутки. Строка прокрутки будет включена только в том случае, если я вручную горизонтально изменяю размер страницы содержимого до тех пор, пока не исчезнет правая граница второй сетки, а затем я изменяю размер страницы содержимого, чтобы граница сетки появилась.
Код: Выделить всё
< /code>
А вот код позади: < /p>
using CommunityToolkit.Maui.Views;
using DataGrid.Models;
using DataGrid.Services;
using Syncfusion.Maui.DataGrid;
using System.Collections.ObjectModel;
using System.ComponentModel;
namespace DataGrid
{
public partial class MainPage : ContentPage
{
private PasswordViewModel viewModel;
public MainPage()
{
InitializeComponent();
viewModel = new PasswordViewModel();
this.BindingContext = viewModel;
}
protected override void OnAppearing()
{
base.OnAppearing();
// Only set the height request for the grid
passwordGrid.HeightRequest = passwordGrid.HeaderRowHeight + passwordGrid.RowHeight * 5;
}
private async void OnSelectDatabaseClicked(object sender, EventArgs e)
{
await ShowDatabaseSelectionPopup();
}
private async Task ShowDatabaseSelectionPopup()
{
var popup = new DatabaseSelectionPopup();
var result = await this.ShowPopupAsync(popup);
if (result is bool selectDatabase && selectDatabase)
{
viewModel.LoadDatabaseData();
}
}
private void GroupGrid_SelectionChanged(object sender, DataGridSelectionChangedEventArgs e)
{
var grid = sender as SfDataGrid;
if (grid == null) return;
var selectedRows = grid.SelectedRows;
foreach (var item in viewModel.Groups)
{
item.IsSelected = selectedRows.Contains(item);
}
// refresh the passwords grid
viewModel.UpdatePasswordsBasedOnSelectedGroups();
}
}
public class Password
{
public int Id { get; set; }
public string Title { get; set; }
public string Username { get; set; }
public string Value { get; set; }
public int GroupId { get; set; }
public Password(int id, string title, string username, string value, int groupId)
{
Id = id;
Title = title;
Username = username;
Value = value;
GroupId = groupId;
}
}
public class PasswordViewModel : INotifyPropertyChanged
{
private ObservableCollection
_groups;
private ObservableCollection _allPasswords;
private ObservableCollection _filteredPasswords;
private bool _pwVisible;
private DatabaseService _databaseService;
public event PropertyChangedEventHandler? PropertyChanged;
public ObservableCollection Groups
{
get { return _groups; }
set
{
_groups = value;
OnPropertyChanged(nameof(Groups));
}
}
public ObservableCollection AllPasswords
{
get { return _allPasswords; }
set
{
_allPasswords = value;
OnPropertyChanged(nameof(AllPasswords));
}
}
public ObservableCollection FilteredPasswords
{
get { return _filteredPasswords; }
set
{
_filteredPasswords = value;
OnPropertyChanged(nameof(FilteredPasswords));
}
}
public bool PwVisible
{
get { return _pwVisible; }
set
{
if (_pwVisible != value)
{
_pwVisible = value;
OnPropertyChanged(nameof(PwVisible));
}
}
}
public PasswordViewModel()
{
_databaseService = new DatabaseService();
_groups = _databaseService.Groups;
_allPasswords = _databaseService.OrderItemsDataSource;
_filteredPasswords = new ObservableCollection();
}
public void LoadDatabaseData()
{
// This simulates loading data from a database selected via popup
_databaseService.InitializeDatabase();
// Make sure our collections reference the updated data
Groups = _databaseService.Groups;
AllPasswords = _databaseService.OrderItemsDataSource;
}
public void UpdatePasswordsBasedOnSelectedGroups()
{
FilteredPasswords.Clear();
var selectedGroupIds = Groups.Where(g => g.IsSelected).Select(g => g.Id).ToList();
foreach (var password in AllPasswords)
{
if (selectedGroupIds.Contains(password.GroupId))
{
FilteredPasswords.Add(password);
}
}
if(FilteredPasswords.Count > 0)
{
// Make PwVisible true only when there are passwords to show, false otherwise
PwVisible = true;
}
}
protected void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... ze-my-scre
Мобильная версия