如何为模板提供值

时间:2014-12-14 10:47:42

标签: c# wpf xaml

我正在使用XCeed Extended Toolkit Plus。特别是图表。但是,我不认为问题需要专门针对此控件,更多关于如何在控件和模板之间传递或共享值。

图表位于WPF UserControl中,但值在后面的代码中设置。没有数据绑定或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是我遇到问题的地方。我不知道输入for text

的内容

我不认为我可以按名称添加值并将其设置在后面的代码中,因为它会在每次迭代时调用(取决于系列中有多少项)。

在我看来,唯一的方法是,如果DataTemplate可以从调用控件继承一些方法。在这个阶段,我的谷歌搜索结果没有提供任何有用的东西,我想我自己也搞糊涂了!

1 个答案:

答案 0 :(得分:0)

我必须猜测,因为我不知道XCeed Extended Toolkit Plus。话虽如此,Datatemplate的Datacontext通常设置为数据对象。在这种情况下,应该是系列对象。这意味着您可以直接绑定到系列对象上的属性,如Title-property。也许它还有一个Date和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>

祝你好运!