Помогите сделать привязку данных к свойствам класса. 2 день не могу разобраться. Вроде теорию понимаю а код получается с кучей ошибок. Для теста создал новый проект wpf в нем папки - pages и - mv для страниц wpf и вью моделей. Нужно загнать в Label Content="{}" текст = Text из класса MainVM Вот разметка xaml страницы page1 :
<Page x:Class="wpf_test.Pages.Page1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300"
Title="Page1" Background="Aqua">
<Grid>
<Label />
</Grid>
и сам класс MainVM
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace wpf_test.mv
{
public class MainVM
{
public string Text { get; set; }
MainVM() { Text = "String test"; }
}
}
Теперь как я понимаю нужно сделать привязку данных что то вроде
<Page.DataContext>
<....>
</Page.DataContext>
Что писать вместо точек и как закончить привязку? Правильно ли вообще я действую и правильно ли использую паттерн MVVM?
Ну почти.
Для начала, вам нужно
<Label Content="{Binding Text}"/>
чтобы привязка проходила к полю Test.
Затем, вам нужно, чтобы в DataContext вашей страницы попал экземпляр MainVM.
Это можно сделать разными путями. Например, так, как вы написали, в XAML:
<Page.DataContext>
<vm:MainVM/>
</Page.DataContext>
Чтобы железяка понимала, что означает vm, вам нужно определить xmlns:vm как-то так:
<Page x:Class="wpf_test.Pages.Page1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="clr-namespace:wpf_test.mv"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
Другой способ — установить в code-behind:
public Page()
{
InitializeComponent();
DataContext = new mv.MainVM();
}
Способ, которым я обычно пользуюсь — не присваивать DataContext самостоятельно, а присвоить его в том коде, который показывает страницу (но это может быть невозможно для навигационных команд, я не проверял).
Ну, раз вы собираетесь пользоваться MVVM, то вы, вероятно, захотите обновлять данные в VM так, чтобы обновлённые данные автоматически отображались в UI. Для этого вашему VM-классу нужно будет имплементировать INotifyPropertyChanged.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости