Как отобразить ContentDialog в WinUI 3 (MVVM)C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как отобразить ContentDialog в WinUI 3 (MVVM)

Сообщение Anonymous »

По сути, в чем моя проблема: я пытаюсь отобразить ContentDialog в своем приложении WinUI 3.
Команда открытия диалогового окна запускается кнопкой ContextMenu в моем «Главном Page» (LibraryPage)
Содержимое диалогового окна представляет собой набор текстовых полей, которые я определяю в другом xaml (LibraryAddSongControl)
Но я не могу напрямую открыть диалоговое окно из моя ViewModel, потому что я не могу получить оттуда доступ к необходимому XamlRoot. И я не могу получить доступ к содержимому текстовых полей диалога, поскольку они лежат в LibraryAddSongViewModel
LibraryPage.xaml LibraryAddSongControl.xaml Команда ContextMenu для открытия ContentDialog из LibraryViewModel

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

[RelayCommand]
public async Task AddNewSong()
{
ContentDialog dialog = new();
dialog.XamlRoot = //Not accessible from ViewModel!
dialog.Style = Application.Current.Resources["DefaultContentDialogStyle"] as Style;
dialog.Title = "Add a new Song to the Library";
dialog.PrimaryButtonText = "Add";
dialog.CloseButtonText = "Cancel";
dialog.IsSecondaryButtonEnabled = false;
dialog.DefaultButton = ContentDialogButton.Primary;
dialog.Content = App.GetService();

ContentDialogResult result = await dialog.ShowAsync();

if (result == ContentDialogResult.Primary)
{
//Logic to handle Save command from Dialog
}

}
Логика в LibraryAddSongViewModel, которая получает содержимое текстовых полей и сохраняет его в базе данных sqlite

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

public void AddSong()
{

SqliteHelper.AddSong(new Song
{
SongTitle = Title,
SongDescription = Description,
SongAlbum = Album,
SongArtists = [$"{Artists}"],
SongDuration = (60 * Convert.ToInt32(Duration.Substring(0, 2)) + Convert.ToInt32(Duration.Substring(3, 2))),
SongURL = Url,
});
}
Я пытался вызвать метод AddSong для LibraryAddSongViewModel из LibraryViewModel, но это привело к тому, что свойства ViewModel, привязанные к содержимому Tedtbox, оказались пустыми и не обновлялись всякий раз, когда я что-то печатаю в текстовом поле
Мой главный вопрос: что такое чистое решение в стиле MVVM для отображения диалогового окна из Xaml1, когда в самом диалоговом окне также есть такие элементы, как текстовые поля, которые имеют значения, которые необходимо обрабатываются (в моем случае просто сохраняются в базу данных)

Подробнее здесь: https://stackoverflow.com/questions/783 ... nui-3-mvvm
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • WinUI 3: программное изменение размера ContentDialog, пока ContentDialog открыт
    Anonymous » » в форуме C#
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • WinUI 3: программное изменение размера ContentDialog, пока ContentDialog открыт
    Anonymous » » в форуме C#
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • WinUI 3 – Как установить фокус на кнопку ContentDialog
    Anonymous » » в форуме C#
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • WinUI 3 – Как установить фокус на кнопку ContentDialog
    Anonymous » » в форуме C#
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Winui 3 - Как установить фокус на кнопку ContentDialog
    Anonymous » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous

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