Два вопроса об элементах управления Telerik UI для UWP
В приложении UWP у меня есть элемент управления RadCartesianChart.С сериями ScatterLine и ScatterArea.Если для ItemsSource установлено значение ObservableCollection, содержащиеся объекты являются простыми объектами со свойствами X и Y с интерфейсом INotifyPropertyChanged, поэтому при обновлении свойств X или Y они запускают события значений изменений.Для привязок значений X и Y установлены соответствующие свойства в ScatterLineSeries
Теперь я понимаю, что источником является ObservableCollection, элемент управления диаграммой обновляется автоматически при добавлении или удалении точки в коллекцию, но какОбновить диаграмму, когда я изменяю значения точки? Как попросить элемент управления диаграммы повторно запросить источники данных?Ниже приведен класс Data Point.
public class DataPoint : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private decimal x;
private ComplexDecimal y;
public decimal X { get => x; set { x = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("X")); } }
public ComplexDecimal Y
{
get => y; set
{
y = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Y"));
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("PhaseDegDouble"));
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("dBV"));
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("dBm"));
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("dBSPL"));
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Magnitude"));
}
}
public double PhaseDegDouble { get => Y.PhaseDegDouble; }
public double dBV { get => Y.TodBV; }
public double dBSPL { get => Y.TodBSPL; }
public double dBm { get => Y.TodBm; }
public double Magnitude { get => Convert.ToDouble(Y.Magnitude); }
}
Итак, у меня есть функциональный объект с полем ObservableCollection Data. Я делаю ScatterLineSeries.
var lineMag = new ScatterLineSeries()
{
ItemsSource = function.Data,
XValueBinding = new PropertyNameDataPointBinding("X"),
YValueBinding = new PropertyNameDataPointBinding("dBV"),
};
и добавляю его в диаграмму с помощью
rcChart.Series.Add(lineMag);
Если я это сделаю:
function.Data.Add(new DataPoint(){X=30,Y=new ComplexDecimal(1,1)});
добавляется точка.Но если я это сделаю:
function.Data[0].Y = new ComplexDecimal(1,1);
график не обновляется.Как обновить диаграмму при изменении существующей DataPoint?(ComplexDecimal - это просто структура для комплексного числа, использующего десятичный тип как для вещественной, так и для отображаемой части)
И небольшой вопрос, кроме того, с ScatterArea, площадь заполняется от 0 до значения, но с моими данными у меня отрицательные значения,и поэтому заполненная область выглядит от кривой к вершине, я хотел бы получить заливку, от кривой до негативной бесконечности. Спасибо!