无法使用 MVVM 将 WPF ChartPlotter 绑定到视图

Posted

技术标签:

【中文标题】无法使用 MVVM 将 WPF ChartPlotter 绑定到视图【英文标题】:Unable to bind the WPF ChartPlotter to the View using MVVM 【发布时间】:2017-06-05 00:34:44 【问题描述】:

我刚刚关注this,使用 MVVM 创建了一个简单的图表绘图仪。但是我无法绑定数据源Output image。

XAML

<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:GrayPlotter"
    xmlns:d3="http://research.microsoft.com/DynamicDataDisplay/1.0" x:Class="GrayPlotter.MainWindow"
    mc:Ignorable="d"
    Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">
<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="117*"/>
        <ColumnDefinition Width="192*"/>
        <ColumnDefinition Width="143*"/>
        <ColumnDefinition Width="58*"/>
        <ColumnDefinition Width="7*"/>
    </Grid.ColumnDefinitions>
    <d3:ChartPlotter x:Name="chartplot" Grid.ColumnSpan="3" HorizontalAlignment="Left" Height="168" Margin="43,65,0,0" VerticalAlignment="Top" Width="379">
        <d3:LineGraph DataSource="Binding Plotvalue"></d3:LineGraph>
    </d3:ChartPlotter>
</Grid>

MainWindowViewModel.cs

namespace GrayPlotter.ViewModel

class MainWindowViewModel : ObservableObject

    ChartPlotter Plotvaluetemp = new ChartPlotter();

    ChartPlotter plotvalue = null;
    public ChartPlotter Plotvalue
    
        get  return plotvalue; 
        set
        
            plotvalue = value;
            RaisePropertyChangedEvent("Plotvalue");
        
    

    class plotData
    
        public ObservableDataSource<Point> Data  get; set; 

        public plotData()
        
            Data = new ObservableDataSource<Point>();
        
    

    plotData plotDatavalue = new plotData();

    public void UpdateplotInformation()
    
        double[] my_array = new double[10];

        for (int i = 0; i < my_array.Length; i++)
        
            my_array[i] = Math.Sin(i);
            plotDatavalue.Data.Collection.Add(new Point(i, my_array[i]));
        
        Plotvaluetemp.AddLineGraph(plotDatavalue.Data);         
        Plotvalue = Plotvaluetemp;        
    


还有 Mainwindow.xaml.cs

namespace GrayPlotter

/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
/// 

public partial class MainWindow : Window

    MainWindowViewModel viewModel ;

    public MainWindow()
    
        InitializeComponent();
        viewModel = new MainWindowViewModel();        
        this.DataContext = viewModel;
    

    private void Window_Loaded(object sender, RoutedEventArgs e)
      
        viewModel.UpdateplotInformation();
    


我就在附近,但我错过了什么?

【问题讨论】:

【参考方案1】:

尝试更改您的 xaml =>

DataSource="Binding Data"

然后你回到 =>

private ObservableDataSource<Point> data;

    public ObservableDataSource<Point> Data
    
        get  return data; 
        set
        
            data = value;
            RaisPropertyChangedEvent("Data");
        
    

    public void UpdateplotInformation()
    
        var list = new List<Point>();
        for (int i = 0; i < 10; i++)
        
            list.Add(new Point(i, Math.Sin(i)));
        
        Data = new ObservableDataSource<Point>(list);
    

【讨论】:

@Shakra 我用CompositeDataSource而不是Point绑定了相同的结果,但未能显示结果。

以上是关于无法使用 MVVM 将 WPF ChartPlotter 绑定到视图的主要内容,如果未能解决你的问题,请参考以下文章

WPF MVVM 将 ComboBox 绑定到 Datagrid 选定项

WPF:如何使用 MVVM 将命令绑定到 ListBoxItem?

在 WPF 中使用 MVVM 将 n 个矩形添加到画布

无法使用 DataTemplate WPF 将 InputBinding 应用于整个 ListBoxItem

使用 Microsoft.Toolkit.Mvvm 和 Microsoft.Xaml.Behaviors.Wpf 将事件参数传递给命令

WPF 如何将主题应用于使用 MVVM 动态创建的对象