2012-01-27 8 views
5

पर बाध्यकारी मैं अपने व्यूमोडेल से डेटा के एक अवलोकननीय चयन को दृश्य में Devexpress 2D स्टॉक चार्ट में बांधने की कोशिश कर रहा हूं। मुझे पता है कि वीएम व्यू के डेटा कॉन्टेक्स्ट को बाध्य करता है क्योंकि मेरे पास खिड़की का शीर्षक वीएम में किसी संपत्ति के लिए बाध्य है और जब मैं प्रोग्राम चलाता हूं तो यह सही होता है। संग्रह को तुरंत ठीक किया गया है, मैं देख सकता हूं कि सभी ऑब्जेक्ट्स बनाए गए हैं, मान हैं, और संग्रह में जोड़े गए हैं।DevExpress StockSeries2D चार्ट

चार्ट जानकारी बस प्रदर्शित नहीं हो रही है। चार्ट केवल उस सूचना को दिखाता है जो इसे बाध्य होना चाहिए। मुझे लगता है कि इसे अपने एक्सएएमएल में एक लाइन के साथ करना है, लेकिन मुझे नहीं पता कि यह क्या है।

यहाँ आउटपुट से त्रुटि है:

System.Windows.Data Error: 40 : BindingExpression path error: 'Snapshots' property not found on 'object' ''ChartElementPanel' (Name='')'. BindingExpression:Path=DataContext.Snapshots; DataItem='ChartElementPanel' (Name=''); target element is 'StockSeries2D' (HashCode=24500892); target property is 'DataSource' (type 'Object')

DevExpress संस्करण 10.1.9

संपादित है: मुझे लगता है कि मैं जानता हूँ कि जहाँ समस्या पर में आ रहा है। StockSeries2D DataContext = DevExpress.Xpf.Charts.ChartElementPanel तो जब मैं

DataSource="{Binding Path=DataContext.Snapshots}" 

यह वास्तव में DevExpress.Xpf.Charts.ChartElementPanel के लिए अंक का उपयोग करें और के बाद से यह एक स्नैपशॉट संपत्ति शामिल नहीं करता त्रुटि फेंक दिया है।

XAML:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="200" /> 
     <RowDefinition Height="50" /> 
    </Grid.RowDefinitions> 
    <dxc:ChartControl Name="chartControl1"> 
     <dxc:ChartControl.Diagram> 
      <dxc:XYDiagram2D> 
       <dxc:XYDiagram2D.Series> 
        <dxc:StockSeries2D DataSource="{Binding DataContext.Snapshots}" HighValueDataMember="High" LowValueDataMember="Low" CloseValueDataMember="Last" ArgumentScaleType="DateTime" ArgumentDataMember="TimeStamp"> 

         <dxc:StockSeries2D.PointOptions> 
          <dxc:PointOptions dxc:FinancialSeries2D.ValueToDisplay="HighValue" /> 
         </dxc:StockSeries2D.PointOptions> 

         <dxc:StockSeries2D.Model> 
          <dxc:ArrowsStock2DModel /> 
         </dxc:StockSeries2D.Model> 
        </dxc:StockSeries2D> 
       </dxc:XYDiagram2D.Series> 

       <!--Region #Axis X--> 
       <dxc:XYDiagram2D.AxisX> 
        <dxc:AxisX2D> 
         <dxc:AxisX2D.DateTimeOptions> 
          <dxc:DateTimeOptions Format="ShortTime" /> 
         </dxc:AxisX2D.DateTimeOptions> 
        </dxc:AxisX2D> 
       </dxc:XYDiagram2D.AxisX> 
       <!-- End Rgion --> 

       <!-- region #AxisY --> 
       <dxc:XYDiagram2D.AxisY> 
        <dxc:AxisY2D> 
         <dxc:AxisY2D.Range> 
          <dxc:AxisRange dxc:AxisY2D.AlwaysShowZeroLevel="False" /> 
         </dxc:AxisY2D.Range> 
        </dxc:AxisY2D> 
       </dxc:XYDiagram2D.AxisY> 

       <!--End Rgion--> 
      </dxc:XYDiagram2D> 
     </dxc:ChartControl.Diagram> 
    </dxc:ChartControl> 
</Grid> 

ViewModel:

public class MainWindowViewModel : INotifyPropertyChanged 
{ 
    ObservableCollection<ISnapShot> _snapShots; 
    string _windowTitle; 

    public MainWindowViewModel() 
    { 
     _snapShots = new ObservableCollection<ISnapShot>(); 
     LoadSnapshots(); 
     WindowTitle = Snapshots.First().Symbol; 
    } 

    public ObservableCollection<ISnapShot> Snapshots 
    { 
     get { return _snapShots; } 
    } 

    public String WindowTitle 
    { 
     get { return _windowTitle; } 
     set { _windowTitle = value; OnPropertyChanged("WindowTitle"); } 
    } 

    private void AddSnapshot(ISnapShot snapshot) 
    { 
     _snapShots.Add(snapshot); 
    } 

    private void LoadSnapshots() 
    { 
     int counter = 0; 

     while (counter < 5) 
     { 
      ISnapShot s = new Snapshot() 
      { 
       TimeStamp = DateTime.Now, 
       Symbol = "XYZ", 
       High = (counter + 1) * 5, 
       Low = (counter + 1) * 2, 
       Last = (counter + 1) * 3 
      }; 

      _snapShots.Add(s); 
      counter++; 
      Thread.Sleep(1000); 
     } 

    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    void OnPropertyChanged(string prop) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(prop)); 
    } 
} 

दृश्य:

public partial class MainWindow : Window 
{ 
    private MainWindowViewModel _vm; 


    public MainWindow(MainWindowViewModel vm) 
    { 
     InitializeComponent(); 
     _vm = vm; 
     this.DataContext = _vm; 
    } 
} 

ऐप:

public partial class App : Application 
{ 
    private void OnStartup(object sender, StartupEventArgs e) 
    { 
     MainWindowViewModel vm = new MainWindowViewModel(); 
     Views.MainWindow view = new Views.MainWindow(vm); 
     view.Show(); 
    } 
} 

उत्तर

5

मैंने इसे समझ लिया। चूंकि StockSeries2D की DataContext विंडो

<dxc:StockSeries2D DataContext="DevExpress.Xpf.Charts.ChartElementPanel"

की DataContext को इंगित नहीं करता मैं खिड़की के DataContext

<dxc:StockSeries2D DataSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.Snapshots}"

उपयोग करने के लिए डेटा स्रोत सेट करने के लिए आवश्यक
संबंधित मुद्दे