2010-08-29 2 views
4

У меня есть UserControl, который я добавил Dependency Property для:Проблемы привязки данных к DependencyProperty на UserControl

public partial class WordControl : UserControl 
{ 

    // Using a DependencyProperty as the backing store for WordProperty. This enables animation, styling, binding, etc... 
    public static readonly DependencyProperty WordProperty = 
     DependencyProperty.Register("WordProperty", typeof(string), typeof(WordControl), new FrameworkPropertyMetadata("", OnWordChange)); 

    public string Word 
    { 
     get { return (string)GetValue(WordProperty); } 
     set { SetValue(WordProperty, value); } 
    } 

, который работает хорошо, когда я вручную установить свойство Word, в XAML:

<WordGame:WordControl Word="Test"></WordGame:WordControl> 

Однако, я хочу, чтобы затем использовать этот UserControl как часть товара Шаблон для ListBox и использования привязки данных, чтобы установить слово:

<ListBox Name="WordList" IsEnabled="False" IsHitTestVisible="False"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Grid> 
        <WordGame:WordControl Word="{Binding}"></WordGame:WordControl> 
       </Grid> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

Который дает следующее сообщение об ошибке, когда я запустить его:

A «Binding» не может быть установлен на территории «слово» типа «WordControl». «Связывание» может быть установлено только на DependencyProperty объекта DependencyObject.

Поскольку UserControl наследует объект DependencyObject, я могу только предположить, что проблема связана с DependencyProperty, но ни один из них не нашел ответа.

Любые идеи?

ответ

12

Ваша регистрация неверна. Это:

public static readonly DependencyProperty WordProperty = 
     DependencyProperty.Register("WordProperty", typeof(string), typeof(WordControl), new FrameworkPropertyMetadata("", OnWordChange)); 

должно быть:

public static readonly DependencyProperty WordProperty = 
     DependencyProperty.Register("Word", typeof(string), typeof(WordControl), new FrameworkPropertyMetadata("", OnWordChange)); 
Смежные вопросы