Как связать ObservableCollection XyDataSeries с помощью свойства Attached - PullRequest
0 голосов
/ 16 января 2019

Я создаю приложение для диаграмм с помощью SciChart.Я добавил класс модификатора диаграммы, который позволяет редактировать данные диаграммы, но только те данные, которые отображаются в данный момент.Мне нужно расширить этот класс, чтобы можно было получить полный доступ к ObservableCollection каждого XyDataSeries.

Я реализовал вложенное свойство, которое я могу связать в MainWindow DataContext, однако всякий раз, когда я запускаю приложение, коллекция отображается какнуль в классе модификаторов.Пожалуйста, вы можете посоветовать.Спасибо

public class MoveBlockModifier : ChartModifierBase
{

    public static readonly DependencyProperty XyFGDataProperty = DependencyProperty.RegisterAttached("XyFGData", typeof(ObservableCollection<XyDataSeries<double,double>>), typeof(MoveBlockModifier), new FrameworkPropertyMetadata(new ObservableCollection<XyDataSeries<double,double>>()));

    public ObservableCollection<XyDataSeries<double, double>> XyFGData
    {
        get { return (ObservableCollection < XyDataSeries<double, double>>)GetValue(XyFGDataProperty); }
        set { SetValue(XyFGDataProperty, value); }
    }

    public MoveBlockModifier()
    {            
        _ghostSeries = new FastLineRenderableSeries()
        {
            Stroke = Colors.Black,
            DataSeries = editingSeries,
            Name = "GhostSeries",                
            StrokeThickness = 1,
            Opacity = 0.75,
        };          

    }

} 

Public Class MainWindow: Window, INotifyPropertyChanged
{
private ObservableCollection<XyDataSeries<double, double>> _xyFGData;
    public ObservableCollection<XyDataSeries<double, double>> XYFGData
    {
        get { return _xyFGData; }
        set { _xyFGData = value; OnPropertyChanged("XYFGData"); }
    }
}

XAML MainWindow

   <s:SciChartSurface x:Name="Chart2">  
                <s:SciChartSurface.ChartModifier>                        
                        <local:MoveBlockModifier  FixStart="{Binding FixStart}" FixEnd="{Binding FixEnd}" 
                                                  IsEnabled="{Binding ChartTwoMoveBlockEnabled, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
                    XyFGData="{Binding XYFGData, Mode=TwoWay}" />
                    </s:ModifierGroup>
                </s:SciChartSurface.ChartModifier>
            </s:SciChartSurface>

1 Ответ

0 голосов
/ 05 февраля 2019

Вышеуказанный вопрос кажется неполным / имеет некоторые ошибки. Вы упоминаете прикрепленное свойство, которое вы определяете как

public static readonly DependencyProperty XyFGDataProperty = DependencyProperty.RegisterAttached("XyFGData", typeof(ObservableCollection<XyDataSeries<double,double>>), typeof(MoveBlockModifier), new FrameworkPropertyMetadata(new ObservableCollection<XyDataSeries<double,double>>()));

    public ObservableCollection<XyDataSeries<double, double>> XyFGData
    {
        get { return (ObservableCollection < XyDataSeries<double, double>>)GetValue(XyFGDataProperty); }
        set { SetValue(XyFGDataProperty, value); }
    }
...

но это не способ определения вложенных свойств в WPF. Следуйте документации MSDN для , как зарегистрировать присоединенное свойство .

Во-вторых, вы определяете значение по умолчанию new ObservableCollectionXyDataSeries<double, double> в вашем FrameworkPropertyMetadata, но это плохая идея, потому что вы будете совместно использовать один экземпляр ObservableCollectionXyDataSeries<double, double> статически для всех экземпляров MoveBlockModifier. Взгляните на Где инициализировать свойства зависимостей ссылочного типа для пользовательского элемента управления?

Наконец, это присоединенное свойство, которое вы хотите определить, но в XAML вы не используете его как присоединенное свойство.

Эта часть:

неверно. Смотрите, как прикрепленное свойство присоединяется в XAML здесь .

Наконец, вы привязываете MoveBlockModifier.XyFGData к свойству XYFGData в главном окне, но DataContext для MoveBlockModifier может не быть MainWindow.

Я предлагаю начать заново и исправить эти ошибки!

...