C# Maui передает ссылку «this» в цепочку кода для использования DisplayAlert, не отображает предупреждение, но ожидает рC#

Место общения программистов C#
Ответить
Anonymous
 C# Maui передает ссылку «this» в цепочку кода для использования DisplayAlert, не отображает предупреждение, но ожидает р

Сообщение Anonymous »

Когда я строил сетку данных из элементов, с каждым из которых связана команда, на основе шаблона, я понял, что не могу просто иметь DisplayAlert на кнопках, которые выполняют команду. Я попытался передать ссылку на дополнительное окно, в котором в конечном итоге находится кнопка, чтобы я мог вызвать метод базового класса «DisplayAlertMessage». Однако хотя метод работает и отображает DisplayAlert при выполнении из базового класса, он не отображается, когда я нажимаю кнопку в сетке данных, которая предлагает выполнить код базового класса.
Мой код выглядит примерно так, сокращенно до минимально используемого:
XAML: Код:

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

public partial class SecondPage: ContentPage
{
private DisplayModel _list;
...
public SecondPage()
{
InitializeComponent();

_list = new DisplayModel(this);
...
}
public async Task DisplayAlertMessage(string name)
{
var confirmation = await DisplayAlert(
"Remove Confirmation",
$"Are you sure you want to remove {name} ?",
"Yes",
"No");
return confirmation;
}
...

--Build a list to use for the grid using individual items

public class DisplayModel : BindableObject
{
public ObservableCollection itemList { get; set; } = new();

private readonly SecondPage _reference;
...

public DisplayModel(SecondPage reference)
{
..
_reference = reference;
GetList();
}
public void GetList()
{
itemList.Clear();

var directoryList = Directory.GetFiles(FolderPath).Select(Path.GetFileName).ToArray();

foreach (string? file in directoryList)
{
itemList.Add(new LoadedItem
{
ref = _reference,
FileName = file,
DirectoryPath = Path
});
}
}
}

--Actual Individual items for use in the grid

public partial class LoadedItem
{
public SecondPage? ref { get; set; }
public string? FileName { get; set; }
public string? DirectoryPath { get; set; }

public ICommand RemoveFile => new Command(RemoveFileCommand);

public void RemoveFileCommand()
{
if (FileName != null && DirectoryPath != null)
{
bool confirmation = ref.DisplayAlertMessage(FileName).Result;

if (confirmation)
{
File.Delete(Path.Combine(DirectoryPath, FileName));
ref._list.GetList();
}
}
}
}
}
ЕСЛИ я удалю раздел bool Confirmation = ... из команды, все будет работать так, как нужно. Но очевидно, что удаление без подтверждения — плохая идея, и нажатие на кнопку запускает DisplayAlertMessage, который запускает DisplayAlert с именем файла, а затем зависает. Окна оповещения нет, но код блокируется, потому что он ждет, пока я нажму «да» или «нет» в окне, которое не отображается.
Однако DisplayAlertMessage работает, если я вызываю его с уровня SecondPage, на котором оно создано, а не с уровней DisplayModel или LoadedItem.
Что я пропустил?

Подробнее здесь: https://stackoverflow.com/questions/798 ... to-use-a-d
Ответить

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

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

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

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

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