WPF图表工具包。将Legend内容绑定到ColumnSeries ViewModel

时间:2017-09-26 12:39:29

标签: c# wpf mvvm wpftoolkit

我在LegendItemStyle

中有一个ColumnSeries
<chartingToolkit:ColumnSeries DependentValuePath="Value" IndependentValuePath="Version" ItemsSource="{Binding ColumnValues}" IsSelectionEnabled="True">
    <chartingToolkit:ColumnSeries.LegendItemStyle>
        <Style TargetType="chartingToolkit:LegendItem" >
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type chartingToolkit:LegendItem}">
                        <Border BorderBrush="Black" BorderThickness="0">
                            <StackPanel>
                                <StackPanel Orientation="Horizontal" >
                                    <Rectangle Width="12" Height="12" Fill="{DynamicResource DesktopBrush}" StrokeThickness="1"  />
                                    <visualizationToolkit:Title Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type chartingToolkit:ColumnSeries}},Path=DataContext.ColumnValues.Legend1, Mode=TwoWay}" Foreground="{Binding ElementName=chart,Path=Tag}" FontSize="18" Margin="10"/>
                                </StackPanel>
                            </StackPanel>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </chartingToolkit:ColumnSeries.LegendItemStyle>
  ...
</chartingToolkit:ColumnSeries>

ColumnSeries ItemsSource绑定到以下类

private ExtendedCollection columnValues = new ExtendedCollection();
public ExtendedCollection ColumnValues
{
    get
    {
        return columnValues;
    }
    set
    {
        columnValues = value;
        PropChanged("ColumnValues");
    }
}

public class ExtendedCollection : ObservableCollection<ColumnInfo>
{
    public string Legend1 { get; set; }
    public string Legend2 { get; set; }
}
public class ColumnInfo
{
    public string Version { get; set; }
    public string DateStamp { get; set; }
    public int Value { get; set; }
    public Brush BackgroundBrush { get; set; }
    public string Platform { get; set; }
}

我无法将LegendItem的{​​{1}} Title绑定到ViewModel中Content的属性Legend1

ColumnValues

1 个答案:

答案 0 :(得分:1)

尝试绑定到父DataContext元素的Legend

xmlns:dataVisualization="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit"
...
<visualizationToolkit:Title Content="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type dataVisualization:Legend}},Path=DataContext.ColumnValues.Legend1, Mode=TwoWay}"/>