Свойство зависимости и ошибка привязки - PullRequest
0 голосов
/ 14 декабря 2011

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

System.Windows.Data Ошибка: 40: Ошибка пути BindingExpression: свойство 'Test' не найдено в 'object'

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

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

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

В моем TextBlock свойство Binding with the 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
}

Что я делаю не так?Это исходит из моего свойства зависимости?

Ответы [ 2 ]

2 голосов
/ 14 декабря 2011

По сути, это то, что у вас есть:

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

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

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

1 голос
/ 14 декабря 2011

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

Никогда не устанавливайте 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...