Справочная информация:
Я использую Avalonia для разработки кроссплатформенного пользовательского интерфейса. Чтобы узнать это, я пытаюсь создать простую программу, которая открывает файл .txt с помощью OpenFileDialog и отображает его содержимое в ComboBox в другом окне.
Я пытаюсь написать метод, который открывает диалог с файлом и возвращает путь, который открыл пользователь. Я использую кнопку с событием Click, чтобы открыть диалоговое окно файла и поместить указанный путь в TextBox для просмотра пользователем. Поскольку я новичок как в WPF, так и в Авалонии, я не уверен, что делать дальше.
Проблема:
Я создал представление пользовательского интерфейса и модель представления. Модель представления использует INotifyPropertyChanged для отображения выбранного пути к файлу в TextBox, который я по умолчанию установил для диска C.
Теперь я хочу использовать OpenFileDialog для обновления этого пути путем к файлу .txt, выбранному пользователем. Я нашел пример, который демонстрирует OpenFileDialog, но, похоже, он не работает для меня, и я не совсем понимаю, как он должен работать.
TxtView.xaml:
<TextBox Text="{Binding Path}" Margin="0 0 5 0" Grid.Column="0" IsReadOnly="True" />
<Button Content="Browse" Click="OnBrowseClicked" Margin="0 0 0 0" Grid.Column="1" />
TxtView.xaml.cs:
public async Task GetPath()
{
var dialog = new OpenFileDialog();
dialog.Filters.Add(new FileDialogFilter() { Name = "Text", Extensions = { "txt" } });
dialog.AllowMultiple = true;
var result = await dialog.ShowAsync();
if (result != null)
{
await GetPath(result);
}
}
public void OnBrowseClicked(object sender, RoutedEventArgs args)
{
var context = this.DataContext as TxtViewModel;
context.Path = "path";
}
TxtViewModel.cs
class TxtViewModel : INotifyPropertyChanged
{
private string _path;
public string Path
{
get => _path;
set
{
if (value != _path)
{
_path = value;
OnPropertyChanged();
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string
propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
Ошибка, которую я получаю с этим кодом, связана с ShowAsync () в файле TxtView.xaml.cs. В сообщении об ошибке говорится: «Не задан аргумент, который соответствует обязательному формальному параметру« parent »в OpenFileDialog.ShowAsync (Window)».
Я пробовал ShowAsync (это), который исправляет ошибку с ShowAsync, но теперь выдает ошибку «Аргумент 1: невозможно преобразовать из« Txt2List.Views.TxtView »в« Avalonia.Controls.Window »
Мы ценим любую помощь, и я прошу прощения, если мне не ясно, я совершенно новичок в Avalonia, WPF и XAML, поэтому я учусь. Пожалуйста, дайте мне знать, если есть дополнительная информация, которую я могу предоставить.