Я не могу прокручивать вертикально в сетке данных в .NET MAUI, если я сначала не изменяю размер своего экранаC#

Место общения программистов C#
Ответить
Anonymous
 Я не могу прокручивать вертикально в сетке данных в .NET MAUI, если я сначала не изменяю размер своего экрана

Сообщение Anonymous »

Я создаю проект .net Maui с двумя сетками данных. Первая сетка данных будет отображать выбор категорий и будет многосекционной. Второй показан список элементов, которые отображаются в зависимости от того, какая категория выбран. Я делаю это, добавив эту команду в метод Onpearing в коде:

Код: Выделить всё

passwordGrid.HeightRequest = passwordGrid.HeaderRowHeight + passwordGrid.RowHeight * 5;
< /code>
Теперь, когда я изначально выбираю категорию из первой сетки данных, которая содержит 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»