2011-12-13 2 views
0

После нескольких часов поисков я пришел за помощью:Dependency Property и Binding Error

System.Windows.Data Error: 40 : BindingExpression path error: 'Test' property not found on 'object'

не удалось найти, где моя ошибка связывания была ...

В моей MainWindow у меня есть:

<Exec:PriceView Price="{Binding Test}"/> 
<TextBlock Text="{Binding Test}"/> 

На моем текстовом блоке свойство Binding with Test отлично работает.

Но для моего управления PriceView это не так.

PriceView.xaml

<StackPanel> 
<TextBlock Text="{Binding Price}" FontSize="26" FontFamily="Arial"/> 
</StackPanel> 

PriceView.xaml.cs

public partial class PriceView : UserControl 
{ 
    public PriceView() 
    { 
     this.InitializeComponent(); 
     this.DataContext = this; 
    } 

    #region Dependency Property 
    public static readonly DependencyProperty PriceProperty = DependencyProperty.Register("Price", typeof(float), typeof(PriceView)); 

    public float Price 
    { 
     get { return (float)GetValue(PriceProperty); } 
     set { SetValue(PriceProperty, value); } 
    } 
    #endregion 
} 

Что я делаю неправильно? Является ли это исходящим из моей Dependency Properrty?

ответ

1

Благодаря замечанию @HB я нашел ответ:

Никогда установить DataContext на UserControls

MainWindow.xaml:

<Exec:PriceView Price="{Binding Test}"/> 
<TextBlock Text="{Binding Test}"/> 

PriceView.xaml:

<StackPanel x:name="root"> 
<TextBlock Text="{Binding Price}" FontSize="26" FontFamily="Arial"/> 
</StackPanel> 

PriceView.xaml.cs:

this.root.DataContext = this; 
+1

Исправление: никогда не устанавливайте DataContext представления при использовании свойств зависимостей. – Xcalibur37

+1

Почему бы и нет? Я успешно использовал оба одновременно. Вам нужно только понять, что когда вы устанавливаете DataContext, ваши другие привязки на одном уровне используют один и тот же контекст, если вы не укажете другой источник с использованием RelativeSource или ElementName. – surfen

2

Что у вас есть, в сущности, это:

<Exec:PriceView Price="{Binding Test}" 
       DataContext="{Binding RelativeSource={RelativeSource Self}}"/> 
<TextBlock Text="{Binding Test}"/> 

Это должно быть понятно, почему один переплетные работы в то время как другие не делают.

Правило большого пальца: Никогда не устанавливайте DataContext на UserControls.

+0

не работает. У меня все еще такая же ошибка. Я действительно не понимаю, почему привязка работает в TextBlock Control, а не в элементе управления PriceView. –

Смежные вопросы