簡體   English   中英

如何使用附加屬性綁定XyDataSeries的ObservableCollection

[英]How to Bind an ObservableCollection of XyDataSeries using an Attached Property

我正在使用SciChart創建一個制圖應用程序。 我添加了一個圖表修改器類,該類允許編輯圖表數據,但只能編輯當前顯示的數據。 我需要擴展此類,以便可以訪問每個XyDataSeries的完整ObservableCollection。

我實現了一個附加屬性,可以在MainWindow DataContext中綁定該屬性,但是每當我運行該應用程序時,該集合在修飾符類中都顯示為null。 請您指教。 謝謝

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"); }
    }
}

MainWindow的XAML

   <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>

上面的問題似乎不完整/有一些錯誤。 您提到了一個附加屬性,您將其定義為

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文檔以了解如何注冊附加屬性

其次,您在FrameworkPropertyMetadata中定義new ObservableCollectionXyDataSeries<double, double>的默認值,但這是一個壞主意,因為您將在MoveBlockModifier的所有實例之間靜態共享ObservableCollectionXyDataSeries<double, double>一個實例。 看看在哪里初始化自定義控件的引用類型依賴項屬性?

最后,它是您要定義的附加屬性,但是在XAML中,您沒有像附加屬性那樣使用它。

這部分:

是不正確的。 在此處查看如何在XAML中附加附加屬性

最后,將MoveBlockModifier.XyFGData綁定到主窗口中的屬性XYFGData,但是MoveBlockModifier的DataContext可能不是MainWindow。

我建議重新開始並修復這些錯誤!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM