Как это сделать. DataContext = this: в XAML .... например-> - PullRequest
0 голосов
/ 19 ноября 2018

Хотя после компиляции и запуска кода результат остается тем же, я обнаружил, что в режиме разработки есть небольшая разница в определении контекста данных за XAML в файле .cs, как показано ниже

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            DataContext = new MainViewModel();
        }   
    }

и делать в xaml, как это.

 <Window.DataContext>
        <local:MainViewModel/>
  </Window.DataContext>

Разница заключается в режиме конструирования в окне дисплея при кодировании.Когда код написан на Xaml, вид хороший, и он показывает элементы, например, для.для DataGrid он показывает количество строк и столбцов со значением его значение, если оно определено.

Итак, сказав, что я хочу изменить приведенный ниже код в файле .cs на

public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this;          
        }

его эквивалент в XAML.Я пробовал с кодом ниже

    <Window.DataContext>
        <local:MainWindow/>
    </Window.DataContext>

, но при инициализации возникает исключение.Может кто-нибудь, пожалуйста, помогите мне с этим.Я все еще новичок в контексте контекста данных WPF Databindings.

Спасибо

1 Ответ

0 голосов
/ 19 ноября 2018

Это устанавливает DataContext на новый экземпляр MainWindow (который, в свою очередь, устанавливает DataContext на новый экземпляр и т. Д.):

<Window.DataContext>
    <local:MainWindow/>
</Window.DataContext>

Эквивалент this.DataContext = this будет: <Window ... DataContext="{Binding RelativeSource={RelativeSource Self}}">.

Вы также можете установить время разработки DataContext :

d:DataContext="{d:DesignInstance Type=local:MainWindow, IsDesignTimeCreatable=True}
...