我遇到了DataContext和Title的问题。下面按预期工作:从ItemsSource上下文绑定
<chartingToolkit:LineSeries Title={Binding TrendDaily.Name} ItemsSource="{Binding TrendDaily.Progress}">
//...
</chartingToolkit:LineSeries>
但标题应包含更多的信息,所以我这样做:
<chartingToolkit:LineSeries ItemsSource="{Binding TrendDaily.Progress}">
<chartingToolkit:LineSeries.Title>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding TrendDaily.Name}"/>
<TextBlock Text="-test text"/>
</StackPanel>
</chartingToolkit:LineSeries.Title>
//...
</chartingToolkit:LineSeries>
我想通了标题绑定不工作,因为它具有“进步“元素作为他的背景,但我无法找到有效的约束。
编辑: 完整的新代码绑定错误(参考 '的ElementName = LineName' 结合找不到源):
<Window x:Class="WpfApplication1.MainWindow"
xmlns:chartingToolkit="clr-namespace:System.Windows.Controls.DataVisualization.Charting;assembly=System.Windows.Controls.DataVisualization.Toolkit"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<chartingToolkit:Chart Title="Trend">
<chartingToolkit:Chart.Series>
<chartingToolkit:LineSeries DataContext="{Binding TrendDaily}"
ItemsSource="{Binding Progress}" DependentValuePath="Value" IndependentValuePath="Key" x:Name="LineName">
<chartingToolkit:LineSeries.Title>
<TextBlock>
<Run Text="{Binding DataContext.Name, ElementName=LineName}"/>
<Run Text="*"/>
</TextBlock>
</chartingToolkit:LineSeries.Title>
</chartingToolkit:LineSeries>
</chartingToolkit:Chart.Series>
</chartingToolkit:Chart>
</Window>
代码背后:
public partial class MainWindow : Window
{
public TrendDailyClass TrendDaily { get; set; }
public MainWindow()
{
TrendDaily = new TrendDailyClass();
DataContext = this;
InitializeComponent();
}
}
public class TrendDailyClass
{
public Dictionary<string, double> Progress { get; set; }
public string Name { get; set; }
public TrendDailyClass()
{
Progress = new Dictionary<string, double>();
Progress.Add("10", 10);
Progress.Add("20", 20);
Name = "test";
}
}
看来,这并不为我工作。我收到以下错误: BindingExpression路径错误:'Name'属性在'object'''LineDataPoint'(Name ='')'找不到。 BindingExpression:路径=名称; DataItem ='LineDataPoint'(Name ='');目标元素是'TextBlock'(Name ='');目标属性是'文本'(类型'String') – michael
@michael:对不起,我忘记使用'ElementName'。无论如何,我编辑了我的答案。请注意,我在'LineSeries'上使用了'x:Name'。 – Nawaz
现在我得到: 找不到与参考'ElementName = LineName'绑定的源代码。 BindingExpression:路径=名称;的DataItem = NULL;目标元素是'运行'(HashCode = 54686603);目标属性是'文本'(类型'字符串') - 从我的理解这应该工作,因为我已经添加了x:名称和元素名称。 – michael