Я хочу сделать интерактивное построение графиков функций для заданных точек. Для рисования я использую Canvas и Path, для манипуляций над точками использую DataGrid и ObservableCollection. Проблема в том, что когда я меняю точки, Canvas не перерисовывается.
UI:
Converter={StaticResource DataToPathConverter}}"
Stroke="Black"/>
Класс данных:
using System.Collections.ObjectModel;
namespace WpfAppCharts.Models
{
public class Data
{
enum Types { LINES, SPLINE }
public string Name { get; set; }
public int Type { get; set; }
public ObservableCollection Records { get; set; }
public Data()
{
this.Name = "No name";
this.Type = (int)Types.SPLINE;
this.Records = new ObservableCollection();
}
}
}
Класс записи:
namespace WpfAppCharts.Models
{
public class Record
{
public double X { get; set; }
public double Y { get; set; }
public Record(double X, double Y)
{
this.X = X;
this.Y = Y;
}
}
}
ViewModel:
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using WpfAppCharts.Models;
namespace WpfAppCharts.ViewModels
{
public class MainWindowViewModel : INotifyPropertyChanged
{
public ObservableCollection Datas { get; set; }
public MainWindowViewModel()
{
Datas = new ObservableCollection();
Datas.Add(new Data());
Datas[0].Records.Add(new Record(0, 0));
Datas[0].Records.Add(new Record(20, 0));
Datas[0].Records.Add(new Record(45, -47));
Datas[0].Records.Add(new Record(53, 335));
Datas[0].Records.Add(new Record(57, 26));
Datas[0].Records.Add(new Record(62, 387));
Datas[0].Records.Add(new Record(74, 104));
Datas[0].Records.Add(new Record(89, 0));
Datas[0].Records.Add(new Record(95, 100));
Datas[0].Records.Add(new Record(100, 0));
Datas[0].Records.Add(new Record(115, 100));
Datas[0].Records.Add(new Record(120, 200));
Datas[0].Records.Add(new Record(130, 300));
Datas[0].Records.Add(new Record(135, 300));
Datas[0].Records.Add(new Record(140, 200));
Datas[0].Records.Add(new Record(145, 50));
Datas[0].Records.Add(new Record(150, 50));
}
public event PropertyChangedEventHandler? PropertyChanged;
private void OnPropertyChanged([CallerMemberName] string? propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
}
Конвертер:
using System.Globalization;
using System.Windows.Data;
using WpfAppCharts.Models;
namespace WpfAppCharts.Converters
{
class DataToPathConverter : IValueConverter
{
enum Types { LINES, SPLINE }
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
Data data = (Data)value;
string result = String.Format("M {0},{1}", data.Records[0].X, data.Records[0].Y);
switch ((int)data.Type)
{
case (int)Types.SPLINE:
case (int)Types.LINES:
for (int i = 1; i < data.Records.Count; i++)
result += String.Format("L {0},{1}", data.Records.X,
data.Records.Y);
break;
}
return result;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... -sharp-wpf
Как обновить визуальное представление геометрического пути на Canvas C# WPF? ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как обновить визуальное представление геометрического пути на Canvas C# WPF?
Anonymous » » в форуме C# - 0 Ответы
- 17 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Библиотека Java для анализа геометрического объекта пространственного объекта
Anonymous » » в форуме JAVA - 0 Ответы
- 39 Просмотры
-
Последнее сообщение Anonymous
-