在ItemsControl中使用带自定义属性的UserControl出现绑定错误
问题排查与解决
错误根源
异常提示“无法为类型为‘UserControl1’的‘Text1’属性设置‘Binding’。‘Binding’只能设置在DependencyObject的DependencyProperty上”,本质原因是:
UserControl2的XAML中,xmlns:local指向的是Project.Controls.Elements,但UserControl1实际位于Project.Controls命名空间,导致XAML解析时找不到正确的UserControl1类型,误将Text1/Text2识别为普通CLR属性(而非依赖属性),从而无法绑定。
修复步骤
- 修改UserControl2.xaml中的命名空间声明,将
local指向UserControl1所在的Project.Controls:
<UserControl x:Class="Project.Controls.UserControl2" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:Project.Controls" mc:Ignorable="d" Height="450" Width="800">
- (可选优化)为UserControl1的依赖属性添加默认值,避免空引用问题:
public readonly DependencyProperty Text1Property = DependencyProperty.Register("Text1", typeof(string), typeof(UserControl1), new PropertyMetadata(string.Empty)); public readonly DependencyProperty Text2Property = DependencyProperty.Register("Text2", typeof(string), typeof(UserControl1), new PropertyMetadata(string.Empty));
验证效果
重新编译运行项目,ItemsControl将正确绑定MyListItem的Text1/Text2属性,UserControl1会正常渲染列表内容,不再抛出XAML解析异常。
内容的提问来源于stack exchange,提问作者nckstr15
相关产品推荐
相关产品推荐

