Установите DataContext в WPF XAML для определенного объекта - PullRequest
0 голосов
/ 30 января 2019

Я запустил окно WPF из консольного приложения.Но у меня возникают трудности с привязкой данных.

TL; DR: можно ли ссылаться на конкретный (просмотреть) объект модели в WPF XAML?

Этомой код:

Console.cs Консольное приложение запускает представление со статической функцией в функции void Main()

static void StartGUI(ViewModelClass viewmodel)
{
    Thread thread = new Thread(() => { new Application().Run(new View.MainWnd(viewmodel)); });
    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
}

, оно получает объект viewmodel, который имеетинициировано в Main().

ViewModel.cs Модель представления - это обычная имплементация интерфейса INotifyPropertyChanged со свойством, которое должно быть привязано к представлению.

using System;
using System.ComponentModel;
using System.Runtime.CompilerServices;

using ConsoleStartsGUI.Model;

namespace ConsoleStartsGUI.ViewModel
{
    public class ViewModelClass : INotifyPropertyChanged
    {
        ModelClass model = new ModelClass();

        public string VMProperty
        {
            get { return model.TestProperty; }
            set
            {
                model.TestProperty = value;
                OnPropertyChanged();
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChanged([CallerMemberName] String propertyName = "")
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

View.xaml В представлении у меня возникают проблемы: представление должно знать ту же модель представления, что и консольное приложение.

В настоящее время я использую

<Window.DataContext>
    <ViewModel:ViewModelClass/>
</Window.DataContext>

дляпривязать viewmodelclass к представлению (это результат, который я щелкнул в конструкторе VS), поскольку он обычно работает, когда я использую проект WPF с начала.Но это создает новый объект, который не является объектом консольного приложения.

View.xaml.cs

using System.Windows;
using ConsoleStartsGUI.ViewModel;

namespace ConsoleStartsGUI.View
{
    public partial class MainWnd : Window
    {
        public MainWnd(ViewModelClass viewmodel)
        {
            InitializeComponent();
        }
    }
}

Есть ли способ ссылки на конкретный объект (представление) модели в XAML?

С наилучшими пожеланиями, Мартин

1 Ответ

0 голосов
/ 30 января 2019

Да, это возможно: просто присвойте DataContext из вашего конструктора

class MainWindow : Window
{
    public MainWindow(ViewModelClass viewmodel)
    {
        InitializeComponent();
        this.DataContext = viewmodel; // should work before as well as after InitalizeComponent();
    }
}

Привязка его из XAML, очевидно, по какой-то причине не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...