我遇到了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