【问题标题】:WPF Textbox Binding ErrorWPF 文本框绑定错误
【发布时间】: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");
            }
        }
    }
}

【问题讨论】:

  • 错误似乎表明绑定的SourceDeviceTypeString,而不是DeviceType 类的实例(这就是为什么它说Name 没有t 存在)。您是否有特殊原因在绑定上使用Source,而不是让DataContext 自然流动?您是否有可能在 XAML 中的某处定义了 Resource 并带有“ResourceType”的 key?如果是这样,它会捡起来。
  • 您能否向我们展示更多来自您的UserControl 的XAML?我想看看你的TextBox 的所有祖先是如何绑定的,以及DataContext 的来源。
  • NotifyPropertyChanged,不应该是 OnPropertyChanged 吗?
  • @stuicidle 它可以是最终引发PropertyChanged 事件的任何东西。无论哪种方式,这都与他的错误无关,因为错误发生在创建绑定时,远在任何通知发生之前。
  • 添加了更多的 XAML 代码,@BradleyUffner,我不确定你让 DataContext 自然流动是什么意思?我还是这个 wpf 绑定的新手。

标签: wpf binding textbox


【解决方案1】:

我最终在这里找到了答案:How To Bind a Property to Textbox using MVVM and MVVM toolkit?

我还更新了对象名称 (DeviceTypeObj),使其更加清晰。

<TextBox Text="{Binding DeviceTypeObj.Name, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" TabIndex="0" 
                                 x:Name="tb_Name" HorizontalAlignment="Stretch" Height="32" Margin="159,28,5.2,0"  VerticalAlignment="Top"  />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-23
    • 2016-01-03
    • 2012-11-24
    • 2015-10-16
    • 2019-03-25
    • 2011-03-29
    • 2010-12-20
    • 2016-07-22
    相关资源
    最近更新 更多