BindingExpression路径错误:找不到属性

时间:2016-01-13 08:58:37

标签: c# wpf xaml user-controls

BusyIndi​​cator.xaml

<UserControl x:Class="Eigen.Modules.Modelling.Components.BusyIndicator"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:Eigen.Modules.Modelling.Components"
             xmlns:telerikControls="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls"
             xmlns:gif="http://wpfanimatedgif.codeplex.com"
             mc:Ignorable="d" 
             d:DesignHeight="150" d:DesignWidth="150"
             DataContext="{Binding RelativeSource={RelativeSource Self}}">

    <Grid Width="{Binding Width}" Height="{Binding Height}">
        <telerikControls:RadBusyIndicator IsIndeterminate="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=IsIndeterminate}">
            <Border BorderBrush="White" Background="#A9FFFFFF" BorderThickness="1">
                <Grid>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="*"/>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>

                    <Border Padding="5,0" Grid.Row="0">
                        <Image gif:ImageBehavior.AnimatedSource="/`enter code here`Resources/matriksenerji.gif" gif:ImageBehavior.AutoStart="True"/>
                    </Border>

                    <Border Padding="5" Grid.Row="1">
                        <TextBlock Text="{Binding RelativeSource={RelativeSource AncestorType={x:Type UserControl}}, Path=Label}" FontWeight="SemiBold" VerticalAlignment="Center" HorizontalAlignment="Center" TextAlignment="Center"/>
                    </Border>
                </Grid>
            </Border>
        </telerikControls:RadBusyIndicator>
    </Grid>
</UserControl>

BusyIndi​​cator.xaml.cs

public partial class BusyIndicator : UserControl
{
    public BusyIndicator()
    {
        InitializeComponent();
    }



    public string Label
    {
        get { return (string)GetValue(LabelProperty); }
        set { SetValue(LabelProperty, value); }
    }

    // Using a DependencyProperty as the backing store for Label.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty LabelProperty =
        DependencyProperty.Register("Label", typeof(string), typeof(MatriksBusyIndicator), new PropertyMetadata(string.Empty));



    public bool IsIndeterminate
    {
        get { return (bool)GetValue(IsIndeterminateProperty); }
        set { SetValue(IsIndeterminateProperty, value); }
    }

    // Using a DependencyProperty as the backing store for IsProgress.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty IsIndeterminateProperty =
        DependencyProperty.Register("IsIndeterminate", typeof(bool), typeof(MatriksBusyIndicator), new PropertyMetadata(true));

}

在Page.xaml中使用

...

<!--BusyIndicator-->
<components:BusyIndicator IsIndeterminate="True" 
                          Visibility="{Binding IsProgress, Converter={StaticResource BoolToVisConverter}}" 
                          Label="{lex:Loc CalculatingProgress}"
                          Grid.Column="1" 
                          VerticalAlignment="Center" 
                          HorizontalAlignment="Center" 
                          Width="150" Height="150"/>

...

错误讯息;

  

System.Windows.Data错误:40:BindingExpression路径错误:&#39; IsProgress&#39;在&#39; object&#39;上找不到的属性&#39;&#39; BusyIndi​​cator控件&#39;   (名称=&#39;&#39;)&#39 ;. BindingExpression:路径= DataContext.IsProgress;   的DataItem =&#39; BusyIndi​​cator控件&#39; (名称=&#39;&#39);目标元素是&#39; BusyIndi​​cator&#39;   (名称=&#39;&#39);目标财产是“可见性”&#39; (键入&#39;可见性&#39;)

ViewModel类有&#34; IsProgress&#34;属性但不能绑定到usercontrol。

2 个答案:

答案 0 :(得分:2)

在UserControl定义中,您有以下行:

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

这意味着该控件的DataContext是控件本身。所以WPF试图在这个控件中找到IsProgress属性。 据我了解,IsProgress属性是在Page的ViewModel中定义的。

所以修复它的最佳选择就是删除上面的行。

另外修复控件中的Width和Height绑定,将RelativeSource = {RelativeSource AncestorType = {x:Type UserControl}}添加到它们。

答案 1 :(得分:0)

您可以尝试追踪:

Visibility="{Binding IsProgress, , diag:PresentationTraceSources.TraceLevel=High, Converter={StaticResource BoolToVisConverter}}" 

我建议你看看这里: debugging WPF binding problems