DataBinding错误并仅更改元素DataContext

时间:2016-02-18 16:43:12

标签: wpf xaml data-binding binding

我有一个有视图模型的视图。一切都很好。但是,我想只将一个按钮的数据上下文更改为后面的代码,以便我可以利用DataTrigger并将其绑定到后面代码中的属性。这是按钮:

<telerik:RadButton DataContext="{Binding RelativeSource={RelativeSource Self}}" Grid.Column="9" Grid.Row="4" FontWeight="Bold" FontSize="20" Click="RadCapButton_Click">
                <telerik:RadButton.Content>
                    <Image Source="/TrainLoader;component/Images/UpArrow.png"/>
                </telerik:RadButton.Content>
                <telerik:RadButton.Style>
                    <Style TargetType="telerik:RadButton">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding IsCap}" Value="True">
                                <Setter Property="Background">
                                    <Setter.Value>
                                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                            <GradientStop Color="GhostWhite" Offset="0"/>
                                            <GradientStop Color="Yellow" Offset="0.5"/>
                                            <GradientStop Color="Yellow" Offset="0.5"/>
                                            <GradientStop Color="GhostWhite" Offset="1"/>
                                        </LinearGradientBrush>
                                    </Setter.Value>
                                </Setter>
                            </DataTrigger>
                            <DataTrigger Binding="{Binding IsCap}" Value="False">
                                <Setter Property="Background">
                                    <Setter.Value>
                                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                                            <GradientStop Color="GhostWhite" Offset="0"/>
                                            <GradientStop Color="Gray" Offset="0.5"/>
                                            <GradientStop Color="Gray" Offset="0.5"/>
                                            <GradientStop Color="GhostWhite" Offset="1"/>
                                        </LinearGradientBrush>
                                    </Setter.Value>
                                </Setter>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </telerik:RadButton.Style>
            </telerik:RadButton>

如您所见,我已设置

DataContext="{Binding RelativeSource={RelativeSource Self}}"

按钮中的

。我认为这应该绑定到正确的代码?

在我的DataTrigger中,我试图绑定到IsCap属性,如下所示:

<DataTrigger Binding="{Binding IsCap}" Value="True">

但是,我收到了DataBinding错误:

System.Windows.Data Error: 40 : BindingExpression path error: 'IsCap' property not found on 'object' ''RadButton' (Name='')'. BindingExpression:Path=IsCap; DataItem='RadButton' (Name=''); target element is 'RadButton' (Name=''); target property is 'NoTarget' (type 'Object')

1 个答案:

答案 0 :(得分:0)

我发现了我的问题。当我设置DataContext="{Binding RelativeSource={RelativeSource Self}}"时出现问题。这导致Button绑定到自身。我不得不使用前一行代码,而是使用DataContext="{Binding RelativeSource={RelativeSource AncestorType=UserControl}}"。这导致datacontext被设置为包含按钮的usercontrol。这解决了我的问题。