Помогите сделать привязку данных к свойствам класса. 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
.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Пытаюсь вызвать функцию rgethstpar_date из библиотеки Honeywell hscnetapidll в C# 4 VS 2010
Доброе утро, у меня из бд отображается datagridView, проблема в том что последний столбец является типом datetime и обратно из грида в бд он не парсится...
Всем приветХочу попробовать сделать видео плеер, который будет читать следующие форматы: AVI, WMV, MOV, MKV, 3gp и т