2009-04-03 3 views
0

Я получаю ошибку во время выполнения, когда использую DataBinding, и это сводит меня с ума. У меня есть простой UserControl, который я определил, назовем его SillyControl. Отдельно, у меня есть коллекцияПривязка к UserControl вызывает ManagedRuntimeError

ObservableCollection<MyClass> myObjects; 

и ListBox под названием SillyListBox, который связан с этим ObservableCollection с помощью: SillyListBox.ItemsSource = myObjects; в окне списка определен в XAML как это:

<ListBox x:Name="SillyListBox"> 
<ListBox.ItemTemplate> 
    <DataTemplate> 
    <MyControls:SillyControl TestString="{Binding Name}" /> 
    </DataTemplate> 
</ListBox.ItemTemplate> 
</ListBox> 

Таким образом, всякий раз, когда добавляется объект к коллекции myObjects, новый SillyControl следует добавить в ListBox, а свойство TestString этого SillyControl должно быть привязано к свойству Name объекта MyClass, который он представляет.

Это не работает. Он компилируется отлично, но когда я запускаю программу, это дает мне неприятную ошибку времени выполнения - System.Windows.Markup.XamlParseException и ниже того, что говорит AG_E_PARSER_BAD_PROPERTY_VALUE.

Теперь, если я просто удалю привязку, дайте TestString фиксированное значение, например ошибка исчезнет. Также возможно определить элемент управления TextBlock вместо SillyControl и успешно использовать привязку к нему. Что на Земле вызывает это?

Update: В соответствии с просьбой, вот как определяются SillyControl:

public partial class SillyControl : UserControl 
{ 
    private string testString; 
    public string TestString 
    { 
     get { return testString; } 
     set { testString = value; } 
    } 

    public SillyControl() 
    { 
     InitializeComponent(); 
    } 
} 

Часть XAML действительно скелетная. Я использую XAML по умолчанию, поэтому это не что иное, как пустая сетка.

ОБНОВЛЕНИЕ 2: Я создал very simple test project для загрузки, что воссоздает проблему.

+0

Нам нужно знать больше о SillyControl. Анализатор Xaml не обнаруживает свойство TestString в элементе управления. – AnthonyWJones

+0

Спасибо за отзыв. Я обновил вопрос. – JubJub

ответ

1

MyClass необходимо реализовать INotifyPropertyChanged: http://weblogs.asp.net/joelvarty/archive/2008/11/17/silverlight-databinding-the-observable-collection.aspx

+0

Я согласен, что это было бы хорошо, но почему бы не реализовать этот интерфейс в результате ошибки. Это просто означало бы, что изменения, внесенные в значение свойства, не смогут попасть в пользовательский интерфейс, но не должны вызывать эту ошибку. – AnthonyWJones

+0

MyClass выполнял INotifyProperty при возникновении этой ошибки. Я также тестировал с удалением INotifyProperty. Никуда идти. – JubJub

1

Оказывается, что свойство привязки к должен быть DependencyProperty.

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