У меня серьезная проблема в привязке данных.DataBinding в ItemsControl к пользовательскому свойству UserControl
У меня есть StackPanel с ItemControl в моем MainPage.xml:
<StackPanel>
<ItemsControl x:Name="TopicList">
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:TopicListItem Title="{Binding Title}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
Тогда я зацепить IEnumerable
объект на том, что, который содержит объект со свойством Title
на нем. Это делается в MainPage.xaml.cs (и я знаю, что LINQ часть работает):
var resultStories = from story in resultXML.Descendants("story")
select new NewsStory {...};
Dispatcher.BeginInvoke(() => TopicList.ItemsSource = resultStories);
А внутри моего пользовательского элемента управления TopicListItem Я создал DepenencyProperty
и соответствующую общественную собственность:
#region Title (DependencyProperty)
/// <summary>
/// Title
/// </summary>
public String Title
{
get { return (String)GetValue(TitleProperty); }
set { SetValue(TitleProperty, value); }
}
public static readonly DependencyProperty TitleProperty =
DependencyProperty.Register("Title", typeof(String), typeof(TopicListItem),
new PropertyMetadata(0, new PropertyChangedCallback(OnTitleChanged)));
private static void OnTitleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
((TopicListItem)d).OnTitleChanged(e);
}
private void OnTitleChanged(DependencyPropertyChangedEventArgs e)
{
throw new NotImplementedException();
}
#endregion Title (DependencyProperty)
Когда я запускаю это и пытается установить ItemSource
ошибка появляется на свойстве Название:
System.TypeInitializationException: тип инициализатора для «NewsSync.Topic ListItem выбрасывает исключение. ---> System.ArgumentException: Тип значения по умолчанию не соответствует типу свойства.
-
В качестве примечания: Я пытался не объявляя DepenencyProperty для свойства Title и просто иметь его в качестве публичной String. Но потом я получаю конверсионные вопросы, где говорится, что я не могу конвертировать из System.[...].Binding
в System.String
Так что я действительно много пробовал.
Это было сложно взломать, и я сделал это случайно с помощью аналогичного изменения: 'public static readonly DependencyProperty TitleProperty = DependencyProperty.Register (" Title ", typeof (String), typeof (TopicListItem), new PropertyMetadata (null)); ' – JeroenEijkhof
Спасибо за ясность, что я не понял эту часть о значении по умолчанию свойства зависимостей. Который, кстати, я тоже искал: D – JeroenEijkhof