2013-04-15 3 views
1

У меня есть свойство зависимости, которая является частью пользовательского элемента управления на основе текстового поля: в МОФ 4.5, vb.net 4.5, Visual Studio 2012.МОФ зависимости ошибки собственности от таможенного контроля

Вот декларация собственности:

#Region "DEPENDENCY PROPERTIES -- ItemsSource" 
    Public Property ItemsSource As IEnumerable 
     Get 
      Return GetValue(ItemsSourceProperty) 
     End Get 
     Set(ByVal value As IEnumerable) 
      SetValue(ItemsSourceProperty, value) 
     End Set 
    End Property 
    Public ReadOnly ItemsSourceProperty As DependencyProperty = DependencyProperty.Register(_ 
        "ItemsSource", GetType(DependencyObject), GetType(AutoCompleteTextBox), _ 
        New FrameworkPropertyMetadata(Nothing, FrameworkPropertyMetadataOptions.None, _ 
        New PropertyChangedCallback(AddressOf OnItemSourceChanged))) 
#End Region 

затем я объявляю пользовательский элемент управления в небольшом образце проект для тестирования (пользовательский элемент управления находится внутри другого проекта в том же soultion)

Вот является XAML для главного окна с таможенным контролем:

<Window x:Class="MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:krisis="clr-namespace:Krisis.Controls;assembly=Krisis.Controls" 
    Title="MainWindow" Height="350" Width="525" x:Name="MyWindow" 
    DataContext="{Binding RelativeSource={RelativeSource Self}}"> 
    <Grid> 
     <krisis:AutoCompleteTextBox ItemsSource="{Binding Collection, Mode=TwoWay}" Width="497" MinHeight="35" FontSize="18" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="10,41,10,243"/> 
    </Grid> 
</Window> 

Но XAML редактор подчеркивает customcontrol линии и выдает следующее сообщение об ошибке:

Error 1 A 'Binding' cannot be set on the 'ItemsSource' property of type 'AutoCompleteTextBox'. A 'Binding' can only be set on a DependencyProperty of a DependencyObject.

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

+1

Сообщение полный код контроля. Кроме того, почему ваше свойство объявлено как 'typeof (DependencyObject)'? это должно быть 'typeof (IEnumerable)'. –

+0

@HighCore ваше право, я играл вокруг, пытаясь заставить все работать. –

ответ

1

DependencyProperty должен быть в VB или StaticShared в C#

Пример:

Public Property ItemsSource As IEnumerable 
    Get 
     Return GetValue(ItemsSourceProperty) 
    End Get 
    Set(ByVal value As IEnumerable) 
     SetValue(ItemsSourceProperty, value) 
    End Set 
End Property 

Public Shared ReadOnly ItemsSourceProperty As DependencyProperty = DependencyProperty.Register(_ 
       "ItemsSource", GetType(DependencyObject), GetType(AutoCompleteTextBox), _ 
       New FrameworkPropertyMetadata(Nothing, FrameworkPropertyMetadataOptions.None, _ 
       New PropertyChangedCallback(AddressOf OnItemSourceChanged))) 
+0

haha ​​хорошо один. Я этого не видел =) –

+0

Спасибо, исправил! Это мой первый день с зависимыми свойствами. Если вы не возражаете, зачем его нужно делиться? –

+1

@J King, свойства зависимостей используются в привязке, анимации и т. Д. Его определение статично, потому что среда выполнения WPF должна получить доступ к определению без необходимости создавать экземпляры объектов несколько раз. Он был спроектирован так, потому что создание ненужного объекта только для определения определения свойства зависимостей будет стоить производительности. –

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