无法使用 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?
无法使用 DataTemplate WPF 将 InputBinding 应用于整个 ListBoxItem
使用 Microsoft.Toolkit.Mvvm 和 Microsoft.Xaml.Behaviors.Wpf 将事件参数传递给命令