2011-09-12 8 views
0

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"; 
    } 
} 

答えて

1

バインドTrendDailyDataContextLineSeriesの場合は、ElementName

はまた、2 TextBlockを使用する必要はありません..あなたは、として(非常に軽量なクラスです)Runを使用することができます。それは、不要な視覚的な要素を避けるように、それは良いでしょう

<StackPanel Orientation="Horizontal"> 
     <TextBlock> 
      <Run Text="{Binding DataContext.Name, ElementName=LineName}"/> 
      <Run Text="-test text"/> 
     </TextBlock> 
    </StackPanel> 

UIElementから派生したクラスは比較的重いです。

+0

それは、これが私のために動作しませんようです。 BindingExpressionパスエラー: 'Name'プロパティが 'object' '' LineDataPoint '(Name =' ')'に見つかりません。 BindingExpression:Path =名前。 DataItem = 'LineDataPoint'(Name = '');ターゲット要素は 'TextBlock'(Name = '')です。 targetプロパティは 'Text'(タイプ 'String')です – michael

+0

@michael:申し訳ありませんが、私は 'ElementName'を使用することを忘れていました。とにかく、私は私の答えをedied。 'LineSeries'に' x:Name'を使っています。 – Nawaz

+0

今すぐ入手します: 'ElementName = LineName'という参照でバインド元が見つかりません。 BindingExpression:Path =名前。 DataItem = null;ターゲット要素は 'Run'(HashCode = 54686603)です。 targetプロパティは 'Text'(タイプ 'String')です。これはx:NameとElementの名前を追加したので、これがうまくいくはずです。 – michael

0

あなたが最初のコード例であれば作業、あなたが第一の結合でStringFormatプロパティを使用することができるはずです。

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