如何在同一模板中设置itemsource时将其他源设置为属性?

时间:2015-07-06 05:58:00

标签: c# wpf

当我想从viewModel获取ChartColor时,它会尝试在BugsData中找到它,因为我设置了ItemsSource="{Binding BugsDataCollection}"。你有解决方案吗?

这是我的代码:

<Style x:Key="ColumnColor" TargetType="DVC:ColumnDataPoint">
    <Setter Property="Background" Value="{Binding ChartColor}"/>
</Style>

<ControlTemplate x:Key="ColumnSeriesTemplate">
    <DVC:Chart>
        <DVC:Chart.Series>
            <!--
            <DVC:ColumnSeries.DataPointStyle>
                <Style TargetType="{x:Type DVC:ColumnDataPoint}">
                    <Setter Property="Background" Value="{Binding ChartColor}" />
                </Style>
            </DVC:ColumnSeries.DataPointStyle>
            -->
            <DVC:ColumnSeries DataPointStyle="{StaticResource ColumnColor}"
                    Title="{ComponentType}"
                    ItemsSource="{Binding BugsDataCollection}"
                    IndependentValueBinding="{Binding Path=Key}"
                    DependentValueBinding="{Binding Path=Value}"></DVC:ColumnSeries>
        </DVC:Chart.Series>
    </DVC:Chart>
</ControlTemplate>

2 个答案:

答案 0 :(得分:0)

你必须明确指定绑定的来源,因为默认的源(DataContext)指向错误的对象(BugsData)。

您可以通过以下方式指定来源:

{Binding Source=...}
{Binding RelativeSource=...}
{Binding ElementName=...}

试试这个:

 Value="{Binding DataContext.ChartColor, 
                 RelativeSource={RelativeSource AncestorType=DVC:Chart}}"

或者你可以尝试将viewmodel添加到usercontrol的资源中并使用staticresource来查找viewmodel:

 Value="{Binding DataContext.ChartColor, 
                 Source={StaticResouce MyViewModelResourceKey}}"

答案 1 :(得分:0)

您可以使用相对源绑定来访问层次结构中较高层的元素的数据上下文,并且可以访问您的完整视图模型:

<Setter Property="Background"
    Value="{Binding DataContext.ChartColor, RelativeSource={RelativeSource AncestorType={x:Type DVC:Chart}}}" />