Я хочу сделать интерактивное построение графиков функций для заданных точек. Для рисования я использую 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#
Место общения программистов C#
1732632229
Anonymous
Я хочу сделать интерактивное построение графиков функций для заданных точек. Для рисования я использую 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[i].X,
data.Records[i].Y);
break;
}
return result;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79227161/how-to-update-visual-of-geometrical-path-on-canvas-c-sharp-wpf[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия