2016-01-13 2 views
1

BusyIndicator.xamlBindingExpression ошибка путь: свойство не найдено

<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> 

BusyIndicator.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 Error: 40 : BindingExpression path error: 'IsProgress' property not found on 'object' ''BusyIndicator' (Name='')'. BindingExpression:Path=DataContext.IsProgress; DataItem='BusyIndicator' (Name=''); target element is 'BusyIndicator' (Name=''); target property is 'Visibility' (type 'Visibility')

Класс ViewModel имеет свойство IsProgress, но не может связываться с usercontrol.

+0

Что такое datacontext для страницы.xaml? – daryal

+0

Класс viewmodel. @daryal –

ответ

2

В определении UserControl вы имеете следующую строку:

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

Это означает, что DataContext для этого элемента управления является самим элементом управления. Поэтому WPF пытается найти свойство IsProgress в этом элементе управления. Как я понимаю, свойство IsProgress определено в ViewModel вашей страницы.

Итак, лучший вариант исправить это просто удалить выше строки.

Дополнительная информация для фиксации связей ширины и высоты в элементе управления добавляет к ним RelativeSource = {RelativeSource AncestorType = {x: Тип UserControl}}.

0

Вы можете попробовать след:

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

Я предлагаю вам взглянуть здесь: debugging WPF binding problems