我有一个有视图模型的视图。一切都很好。但是,我想只将一个按钮的数据上下文更改为后面的代码,以便我可以利用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')
答案 0 :(得分:0)
我发现了我的问题。当我设置DataContext="{Binding RelativeSource={RelativeSource Self}}"
时出现问题。这导致Button绑定到自身。我不得不使用前一行代码,而是使用DataContext="{Binding RelativeSource={RelativeSource AncestorType=UserControl}}"
。这导致datacontext被设置为包含按钮的usercontrol。这解决了我的问题。