【发布时间】:2018-01-24 16:51:18
【问题描述】:
我不知道为什么我不断收到此错误,并且当我在 GUI 中更改 tb_Name TextBox 时,Name 中的 Set 永远不会被调用。
System.Windows.Data 错误:40:BindingExpression 路径错误:“名称” 在“对象”“字符串”(HashCode=2106982518)上找不到属性。 绑定表达式:路径=名称; DataItem='String' (HashCode=2106982518); 目标元素是'TextBox'(名称='tb_Name');目标属性是 “文本”(输入“字符串”)
XAML
<UserControl
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:ConfigStudioUI.Controls" x:Class="ConfigStudioUI.Controls.DeviceTypeTabCtrl"
mc:Ignorable="d" x:Name="DeviceTypeUC" Loaded="DeviceType_Loaded"
d:DesignHeight="400" d:DesignWidth="600" Background="#FF00C8FF"
>
<Grid>
<TabControl Background="#FF00FF99" FontSize="14"
TabStripPlacement="Left" Margin="0, 0, 0, 10" >
<TabItem Name="PropertiesTab" Header="Properties">
<Grid>
<Grid >
<TextBox Text="{Binding Source=DeviceType, Path=Name, Mode=TwoWay}"
TabIndex="0" x:Name="tb_Name" HorizontalAlignment="Stretch" Height="32"
Margin="159,28,5.2,0" VerticalAlignment="Top" />
</Grid>
</Grid>
</TabItem>
</TabControl>
</UserControl>
代码背后
public partial class DeviceTypeTabCtrl : UserControl
{
public DeviceType DeviceType { get; set; }
public DeviceTypeTabCtrl(DeviceType deviceTypeObject, DeviceTypeGroup
deviceTypeGroupObject)
{
InitializeComponent();
DataContext = this;
this.DeviceType = new DeviceType();
this.DeviceType = deviceTypeObject;
this.tb_Name.Text = deviceTypeObject.Name;
this.DeviceType.DeviceTypeGroupGUID =
deviceTypeGroupObject.DeviceTypeGroupGUID;
}
}
public class DeviceType : INotifyPropertyChanged
{
/// <summary>
/// Name
/// </summary>
public string Name
{
get
{
return this.name;
}
set
{
if (this.name != value)
{
this.name = value;
NotifyPropertyChanged("Name");
}
}
}
}
【问题讨论】:
-
错误似乎表明绑定的
Source的DeviceType是String,而不是DeviceType类的实例(这就是为什么它说Name没有t 存在)。您是否有特殊原因在绑定上使用Source,而不是让DataContext自然流动?您是否有可能在 XAML 中的某处定义了Resource并带有“ResourceType”的key?如果是这样,它会捡起来。 -
您能否向我们展示更多来自您的
UserControl的XAML?我想看看你的TextBox的所有祖先是如何绑定的,以及DataContext的来源。 -
NotifyPropertyChanged,不应该是 OnPropertyChanged 吗?
-
@stuicidle 它可以是最终引发
PropertyChanged事件的任何东西。无论哪种方式,这都与他的错误无关,因为错误发生在创建绑定时,远在任何通知发生之前。 -
添加了更多的 XAML 代码,@BradleyUffner,我不确定你让 DataContext 自然流动是什么意思?我还是这个 wpf 绑定的新手。