Ошибки привязки контекста

Рейтинг: 0Ответов: 1Опубликовано: 24.04.2023

Ошибки: введите сюда описание изображения

xaml window:

<Window x:Class="prod_bw.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:prod_bw"
        xmlns:models="clr-namespace:prod_bw.Models"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Window.DataContext>
        <models:Game />
    </Window.DataContext>
    <Grid>
        ...
    </Grid>
</Window>

Код Game:

namespace prod_bw.Models
{
    internal class Game
    {

        public int Kills { get; }
        public int Deaths { get; }

        public Game(int kills, int deaths)
        {
            Kills = kills;
            Deaths = deaths;
        }
    }
}

Пробовал реализовывать контекст INotifyPropertyChanged в Game, не помогло. решение постоянно пересобирал.

Структура проекта:

введите сюда описание изображения

Ответы

▲ 1Принят

Не вникая в подробности, можно сделать так, убрав конструктор с параметрами, либо сделать конструктор без параметров public Game() { ... }.

public class Game
{
    public int Kills { get; set; }
    public int Deaths { get; set; }
}

То есть сделать класс публичным public, а свойства изменяемыми { get; set; }

Тогда создать класс в XAML можно так

<Window.DataContext>
    <models:Game Kills="5" Deaths="10"/>
</Window.DataContext>

Если нужны нули, то Kills="5" Deaths="10" задавать необязательно, можно убрать.

Затем, если нужно будет чтобы UI контролы могли отслеживать изменения в модели, нужно будет реализовать INotifyPropertyChanged. Подробнее об этом я уже рассказывал и показывал в этом ответе.