WPF C#. Привязка к Point

307
19 мая 2017, 12:32

Есть следующая разметка:

<Path Stroke="Red" StrokeThickness="1" Name="Way">
    <Path.Data>
        <PathGeometry>
            <PathFigure IsClosed="False" StartPoint="15,670">
                <ArcSegment Point="{Binding Source=point, Path=Source}" Size="20,20" SweepDirection="Clockwise"/>
            </PathFigure>
        </PathGeometry>
    </Path.Data>
</Path>

В коде есть Point:

public Point point = new Point();

Почему не работает привязка к нему?

Answer 1

Привязка возможна только к свойствам (а не к полям):

public Point point {get;set;} = new Point();

...

<ArcSegment Point="{Binding Path=point}" Size="20,20" 
  SweepDirection="Clockwise"/>
Answer 2

Возможно у ваша дуга находится за пределами контейнера, поэтому её не видно.
Набросал простой пример, чтобы показать как работает привязка к Point:

MainVM.cs:

using System;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Timers;
using System.Windows;
namespace WpfTest
{
    class MainVM : INotifyPropertyChanged
    {
        Point point;
        public Point Point
        {
            get => point;
            set => Set(ref point, value);
        }
        public MainVM()
        {
            Random random = new Random();
            var timer = new Timer(500);
            timer.Elapsed += (o, e) => Point = new Point(random.Next(100), random.Next(100));
            timer.Start();
        }
        protected void Set<T>(ref T field, T value, [CallerMemberName] string propertyName = "")
        {
            field = value;
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }
        public event PropertyChangedEventHandler PropertyChanged;
    }
}

MainWindow.xaml:

<Window x:Class="WpfTest.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"
        mc:Ignorable="d" WindowStartupLocation="CenterScreen"
        Title="MainWindow" Height="150" Width="300">
    <Grid>
        <Path Stroke="Red" StrokeThickness="1" Name="Way">
            <Path.Data>
                <PathGeometry>
                    <PathFigure IsClosed="False" StartPoint="50,50">
                        <ArcSegment Point="{Binding Point}" Size="20,20" SweepDirection="Clockwise"/>
                    </PathFigure>
                </PathGeometry>
            </Path.Data>
        </Path>
    </Grid>
</Window>

MainWindow.xaml.cs:

using System.Windows;
namespace WpfTest
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            DataContext = new MainVM();
        }
    }
}

READ ALSO
Рефакторинг XAML-разметки

Рефакторинг XAML-разметки

Читаю Роберта Мартина и пытаюсь постичь все тонкости рефакторинга

186
Переопределение методов для массивов

Переопределение методов для массивов

Вопрос к любознательным гуру C#

209
Авторизация Googel API

Авторизация Googel API

Сейчас моё приложение использует для регистрацииjson файл

202
Считывание текстового файла

Считывание текстового файла

Возникла такая проблема: код запускается, но не считывает текстовый файл, тем более не создает новыйПодскажите как можно изменить

206