C# 从ItemsSource上下文绑定

C# 从ItemsSource上下文绑定,c#,wpf,binding,datacontext,C#,Wpf,Binding,Datacontext,我对DataContext和标题有问题。按计划进行以下工作: <chartingToolkit:LineSeries Title={Binding TrendDaily.Name} ItemsSource="{Binding TrendDaily.Progress}"> //... </chartingToolkit:LineSeries> //... 但是标题应该包含更多信息,所以我正在这样做: <chartingToolkit:LineSeries

我对DataContext和标题有问题。按计划进行以下工作:

 <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>

//...
我发现标题绑定不起作用,因为它有“Progress”元素作为上下文,但我找不到有效的绑定

编辑: 带有绑定错误的完整新代码(找不到引用为'ElementName=LineName'的绑定源):


代码隐藏:

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";
    }
}
公共部分类主窗口:窗口
{
公共TrendDailyClass TrendDaily{get;set;}
公共主窗口()
{
TrendDaily=新的TrendDailyClass();
DataContext=this;
初始化组件();
}
}
公共类
{
公共字典进度{get;set;}
公共字符串名称{get;set;}
公共趋势分类()
{
进度=新字典();
增加(“10”,10);
增加(“20”,20);
Name=“测试”;
}
}

TrendDaily
绑定到
LineSeries
DataContext
,然后在内部绑定中使用
DataContext
,使用
ElementName
如下:

<chartingToolkit:Chart Title="Trend"
                     DataContext="{Binding TrendDaily}"
                     x:Name="LineName">
   <chartingToolkit:LineSeries ItemsSource="{Binding Progress}">
     <chartingToolkit:LineSeries.Title>
       <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding DataContext.Name, ElementName=LineName}"/>
        <TextBlock Text="-test text"/>
       </StackPanel>
     </chartingToolkit:LineSeries.Title>
     //...
  </chartingToolkit:LineSeries>

它更好,因为它避免了不必要的视觉元素。从
UIElement
派生的类相对较重。

如果您的第一个代码示例正在运行,您应该能够在第一个绑定中使用该属性:

<chartingToolkit:LineSeries Title={Binding TrendDaily.Name, StringFormat='{}{0}-test text'} ItemsSource="{Binding TrendDaily.Progress}">
//...
</chartingToolkit:LineSeries>

//...

这似乎不适合我。我收到以下错误:BindingExpression路径错误:“在”“对象”“LineDataPoint”“(名称=“”)”上找不到Name”属性。BindingExpression:Path=Name;DataItem='LineDataPoint'(名称='');目标元素为“TextBlock”(名称=“”);目标属性为“Text”(类型为“String”)@michael:对不起,我忘了使用
ElementName
。不管怎样,我得到了我的答案。请注意,我在
LineSeries
上使用了
x:Name
。现在我得到:找不到引用'ElementName=LineName'绑定的源代码。BindingExpression:Path=Name;DataItem=null;目标元素为“Run”(HashCode=54686603);目标属性为“Text”(类型为“String”)-据我所知,这应该可以工作,因为我添加了x:Name和元素名称。@michael:您使用的是
{Binding Name,ElementName=LineName}
。。不是
{Binding DataContext.Name,ElementName=LineName}
,对吗?使用后者。是的,我使用的是第一个,但使用第二个时,我得到了相同的错误:找不到引用为“ElementName=LineName”的绑定源。BindingExpression:Path=DataContext.Name;DataItem=null;目标元素为“Run”(HashCode=47843779);目标属性为“Text”(类型为“String”)
    <StackPanel Orientation="Horizontal">
       <TextBlock>
          <Run Text="{Binding DataContext.Name, ElementName=LineName}"/>
          <Run Text="-test text"/>
       </TextBlock>
    </StackPanel>
<chartingToolkit:LineSeries Title={Binding TrendDaily.Name, StringFormat='{}{0}-test text'} ItemsSource="{Binding TrendDaily.Progress}">
//...
</chartingToolkit:LineSeries>