2014-12-14 4 views
0

Я использую XCeed Extended Toolkit Plus. Графики специально. Тем не менее, я не думаю, что вопрос должен быть конкретно об этом контроле, подробнее о том, как передавать или делиться значениями между элементами управления и шаблонами.Как предоставить значения шаблону

Таблицы находятся в пользовательском элементе управления WPF, но значения задаются в коде позади. Нет привязки данных или MVVM, более того, подход «winforms».

Графическое изображение работает, но я хочу изменить способ отображения бара (на гистограмме).

Согласно документации, я могу использовать шаблон

<xctk:Chart > 
      <xctk:Chart.Areas> 
       <xctk:Area x:Name="MyGraphArea"> 
        <xctk:Area.XAxis> 

         <xctk:Axis Title="Date" 
            /> 
        </xctk:Area.XAxis> 
        <xctk:Area.YAxis> 
         <xctk:Axis Title="Position" 
            /> 
        </xctk:Area.YAxis> 
        <xctk:Area.Series> 
         <xctk:Series Template="{StaticResource SeriesTemplate}" > 
          <!--done in code behind--> 
         </xctk:Series> 
        </xctk:Area.Series> 
       </xctk:Area> 
      </xctk:Chart.Areas> 
     </xctk:Chart> 

На той же странице XAML, у меня есть в моем Grid.Resources. Это где проблема является

<DataTemplate x:Key="SeriesTemplate"> 
      <Button x:Name="Bar"> 
       <StackPanel> 
        <DockPanel> 
         <TextBlock x:Name="seriesTemplateDate" Text="How To I Bind"></TextBlock> 
        </DockPanel> 
        <DockPanel> 
         <TextBlock x:Name="seriesTemplatePosition" Text="What Am I binding too"></TextBlock> 
        </DockPanel> 
       </StackPanel> 
      </Button> 
     </DataTemplate> 

И в моем коде позади (показывая конструктор)

public GraphView(IEnumerable<DataPoint> graphData, string title) 
    { 
     InitializeComponent(); 

     var series = new Series(); 

     foreach (var dataPoint in graphData) 
     { 
      series.DataPoints.Add(dataPoint); 
     } 
     series.Title = title; 

     this.MyGraphArea.Series.Add(series); 
    } 

Итак, DataTemplate, где у меня вопрос. Я не знаю, как ввести значение text

Я не думаю, что могу добавить значение по имени и установить его в коде позади, потому что он вызывается на каждой итерации (в зависимости от количества элементов в серии).

Единственный способ, в моей голове, это то, что DataTemplate может наследовать некоторые из вызывающего элемента управления. На этом этапе мои результаты Google ничего полезного не дают, и я думаю, что я запутался!

ответ

0

Я должен угадать, так как я не знаю XCeed Extended Toolkit Plus. При этом Datacontext для Datatemplate обычно устанавливается в объект данных. В этом случае это должен быть объект серии. Это означает, что вы можете напрямую привязываться к свойствам объекта серии, например Title-property. Возможно, у него также есть свойство Date and Position ?!

series.Title = title; 
series.Date = date; 
series.Position = position; 

<TextBlock x:Name="seriesTemplateTitle" Text="{Binding Title}"></TextBlock> 
<TextBlock x:Name="seriesTemplateDate" Text="{Binding Date}"></TextBlock> 
<TextBlock x:Name="seriesTemplatePosition" Text="{Binding Position}"></TextBlock> 

Удачи!

Смежные вопросы