gpt4 book ai didi

silverlight - 将 ItemsControl 中的数据绑定(bind)到自定义 UserControl 属性

转载 作者:行者123 更新时间:2023-12-04 06:49:59 26 4
gpt4 key购买 nike

我在数据绑定(bind)方面遇到了重大问题。

我的 MainPage.xml 中有一个带有 ItemControl 的堆栈面板:

                <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和相应的公共(public)属性(property):
    #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 Title 属性出现错误:

System.TypeInitializationException: The type initializer for 'NewsSync.TopicListItem threw an exception. ---> System.ArgumentException: Default value type does not match type of property.



--
附带说明:我尝试不为 Title 属性声明 DepenencyProperty,而只是将其作为公共(public)字符串。但是后来我遇到了转换问题,它说我无法从 System.[...].Binding 转换至 System.String
所以我真的尝试了很多东西。

最佳答案

这一点是你的问题: -

 public static readonly DependencyProperty TitleProperty =
DependencyProperty.Register("Title", typeof(String), typeof(TopicListItem),
new PropertyMetadata(0, new PropertyChangedCallback(OnTitleChanged)));

注意 PropertyMetadata 的第一个参数构造函数是依赖属性的默认值。您已将其注册为 typeof(String)但您使用的是 Int32 (0) 作为初始值。使用 null反而。你也可以只使用: -
public static readonly DependencyProperty TitleProperty =
DependencyProperty.Register("Title", typeof(String), typeof(TopicListItem), null);

由于当前将值分配给 Title 时,您的代码将引发异常。 .您只需要指定一个 PropertyChangedCallback如果您在属性更改时确实有想做的事情。

关于silverlight - 将 ItemsControl 中的数据绑定(bind)到自定义 UserControl 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3267483/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com