相关疑难解决方法(0)

WPF错误40 BindingExpression路径错误:'对象'上找不到属性

我正在敲打我的桌面上的这个绑定错误..我检查了几个BindingExpression路径错误的帖子,看不到任何与我的情况有关的东西.

无论如何,我有一个名为的自定义控件IncrementingTextBox.我试图在用户'检查' CheckBox上面的时候禁用它.

我对该CheckBox IsChecked属性的绑定工作正常,并在它应该发射时触发.它正在UseSensorLengthConfigurationModel上正确设置属性.

但是,对IncrementingTextBox IsEnabled属性的绑定导致BindingExpression路径错误,因此根本不更新.

作为测试,我尝试在后面的代码启用和禁用控件,它工作得很好,但我似乎无法让Binding工作.

这是我的xaml的一个片段:

...

DataContext="{Binding RelativeSource={RelativeSource Self}}"

...
...

<CheckBox Content="Use Sensor Length" Margin="30,6,0,0" 
          IsChecked="{Binding ConfigurationModel.UseSensorLength, Mode=TwoWay}"/>

<local:IncrementingTextBox x:Name="video_length_textbox" Margin="0,0,0,5" 
                           IsTextEnabled="False" 
                           IsEnabled="{Binding ConfigurationModel.DontUseSensorLength}" 
                           ValueChanged="VideoEventValueChanged"/>
Run Code Online (Sandbox Code Playgroud)

这是我的ConfigurationModel的一个片段:

public bool DontUseSensorLength
{
    get { return !UseSensorLength; }
}

public bool UseSensorLength
{
   get { return _useSensorLength; }
   set 
   { 
      _useSensorLength = value; 
      OnPropertyChanged("UseSensorLength"); 
      OnPropertyChanged("DontUseSensorLength");
   }
}
Run Code Online (Sandbox Code Playgroud)

以下是我在运行应用程序时在输出窗口中收到的错误消息:

System.Windows.Data错误:40:BindingExpression路径错误:'object'''IncrementingTextBox'(Name ='video_length_textbox')'上找不到'ConfigurationModel'属性.BindingExpression:路径= ConfigurationModel.DontUseSensorLength; DataItem ='IncrementingTextBox'(Name ='video_length_textbox'); target元素是'IncrementingTextBox'(Name …

c# wpf xaml binding

44
推荐指数
4
解决办法
7万
查看次数

有没有办法确定声明/创建WPF绑定的位置?

我有一个项目,它会抛出一些数据绑定错误.一个例子是:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='System.Windows.Controls.ItemsControl', AncestorLevel='1''. BindingExpression:Path=HorizontalContentAlignment; DataItem=null; target element is 'MenuItem' (Name=''); target property is 'HorizontalContentAlignment' (type 'HorizontalAlignment')

我的问题是,是否有办法确定实际声明此绑定的位置(无论是在XAML中还是在代码中声明).

到目前为止我尝试过的:

  • 为System.Windows.Data命名空间添加了一个调试跟踪,其级别设置为全部; 这没有产生任何更有用的信息
  • 尝试在项目中为Binding一词进行文本搜索,希望找到路径设置为的所有绑定表达式HorizontalContentAlignment; 我发现只有一个并删除它但我仍然收到消息,这似乎表明那不是错误的...

你知道有什么其他的技巧可以让WPF吐出一些更有用的信息,说明这个绑定的确切位置在哪里?

UPDATE

经过一点点搜索后,我很确定这是由某种风格应用于某种原因造成的MenuItem.但是,我仍然无法确定声明错误绑定的位置.

更新2

我发现了这个问题.然而问题仍然存在,因为发现问题主要是基于错误消息中的有限信息在黑暗中搜索.

事实证明,绑定是以一种样式声明的.风格不在我的应用程序中.这可能是默认的风格MenuItem.所以为了解决这个问题,我现在只需手动设置HorizontalContentAlignment全部MenuItems.错误的原因在某种程度上与操作顺序有关,因为这MenuItem是在代码中生成的.我将分别发布一个新问题.

因此,就目前而言,故事的寓意是我觉得需要有一个更好的机制来确定故障绑定的声明位置.我希望看到类似绑定的堆栈跟踪...

如果有人知道确定在代码或标记中声明绑定的位置的任何其他工具或方法,我会将问题保持打开一段时间.

我发布了另一个关于应用于MenuItems此处的样式/绑定的问题.

data-binding wpf

32
推荐指数
2
解决办法
2万
查看次数

你可以将DataTrigger绑定到附加属性吗?

在WPF中,DataTrigger是否可以绑定到附加属性?

我本质上希望在附加属性上使用转换器,以在特定验证规则被破坏时提供样式.我正在使用如下标记:

<DataTrigger Binding="{Binding Path=Validation.Errors, 
                       RelativeSource={RelativeSource Self}, 
                       Converter={StaticResource RequiredToBoolConverter}}" 
                       Value="True">
  <Setter Property="Background" Value="LightGreen" />
</DataTrigger>
Run Code Online (Sandbox Code Playgroud)

但是,当这运行时,我得到以下内容:

System.Windows.Data错误:39:BindingExpression路径错误:'object'''TextBox'(Name ='')'上找不到'Validation'属性.BindingExpression:路径= Validation.Errors; DataItem ='TextBox'(Name =''); target元素是'TextBox'(Name =''); target属性是'NoTarget'(类型'对象')

如果我将DataTrigger绑定路径更改为"Text",我不会得到数据绑定错误(但当然它不提供我正在寻找的行为).

wpf binding datatrigger

19
推荐指数
1
解决办法
7207
查看次数

WPF性能缓慢 - 许多DataItem = null绑定警告

我有一个树形控件表现出非常差的性能,我试图跟踪问题的根源.

我想弄清楚以下警告是否重要:

System.Windows.Data Information: 10 : Cannot retrieve value using the binding and no valid fallback value exists; using default instead. BindingExpression:Path=ContextMenu.IsOpen; DataItem=null; target element is 'MultipleSelectionTreeViewItem' (Name=''); target property is 'NoTarget' (type 'Object')
Run Code Online (Sandbox Code Playgroud)

即使关闭所有这些diags,更新树内容的性能也非常可怕(超过一秒钟重新填充~300项),这就是我开始查看跟踪输出的原因.

在我的树视图中,每次单击时都会显示这些警告,当我切换树以显示不同的内容时,会发生数百个警告.但是,树的内容始终显示正确显示,因此数据上下文必须仅暂时设置为null.

我对DataContext值转换器进行了显式绑定,以尝试查看发生了什么.

<HierarchicalDataTemplate x:Key="HierarchyItemTemplate"
                          DataType="{x:Type local:HierarchyItem}"
                          ItemsSource="{Binding Children}">
    <StackPanel DataContext="{Binding Converter={StaticResource DbgConverter}}" Orientation="Horizontal">
       ...
    </StackPanel>
</HierarchicalDataTemplate>
Run Code Online (Sandbox Code Playgroud)

...但是值似乎永远不等于null进入那里.

我可以为所有绑定设置一个回退值来摆脱这些警告,但这会在xaml中造成很多不必要的混乱,并且似乎隐藏了问题而不是解决它(假设它甚至是一个问题!).

所以我的问题是:

  1. 这些诊断是否可能导致性能问题?
  2. 如果是这样,当关闭诊断时,提供回退值是否会对性能产生任何影响?
  3. 如果是这样,有没有比用crud填充xaml更好的方法呢?

编辑

使用回退值看起来似乎不是解决方案,因为它也无法找到资源:

System.Windows.ResourceDictionary Warning: 9 : Resource not found; ResourceKey='Img_Folder_Closed_Ex'
Run Code Online (Sandbox Code Playgroud)

这就像它忘记了资源字典中的所有内容,生成所有这些虚假错误,然后再次记住它并显示确定.

编辑

好吧,我已经通过评论所有绑定并将它们一个接一个地放回原点来解决这个问题并解决问题,所以现在加载它我可以点击这些项目并且不会产生任何诊断直到..当我点击更改树项目的按钮时,它会变得疯狂并喷出数百个错误.以下是错误的一小部分:

System.Windows.Data Information: 21 : BindingExpression cannot retrieve value …
Run Code Online (Sandbox Code Playgroud)

data-binding wpf performance hierarchicaldatatemplate

13
推荐指数
1
解决办法
5240
查看次数

BindingExpression路径错误:'object'上找不到属性

我一直在搜索出现在输出窗口中的这个错误.我对WPF中的绑定很新,所以我确信有些东西我不知道.

错误的全文(每个绑定路径都有一个,都与此类似):

System.Windows.Data错误:39:BindingExpression路径错误:'object'''String'(HashCode = -842352750)'上找不到'TestItem'属性.BindingExpression:路径= TestItem; DataItem ='String'(HashCode = -842352750); target元素是'TextBlock'(Name =''); target属性是'Text'(类型'String')

编辑:一切似乎都应该工作,但我在输出窗口中得到这些错误.

XAML:

<UserControl>
    <UserControl.Resources>
        <c:MyData x:Key="myDataSource"/>
        <DataTemplate x:Key="image">
            <Image x:Name="TheImage" />
            <DataTemplate.Triggers>
                <DataTrigger Binding="{Binding Path=PassFail}" Value="PASS">
                    <Setter TargetName="TheImage" Property="Source" Value="Images/accept.png" />
                </DataTrigger>
                <DataTrigger Binding="{Binding Path=PassFail}" Value="FAIL">
                    <Setter TargetName="TheImage" Property="Source" Value="Images/delete.png" />
                </DataTrigger>
                <DataTrigger Binding="{Binding Path=PassFail}" Value="WARNING">
                    <Setter TargetName="TheImage" Property="Source" Value="Images/warning.png" />
                </DataTrigger>
            </DataTemplate.Triggers>
        </DataTemplate>
        <Storyboard x:Key="OnMouseLeftButtonDown1"/>
    </UserControl.Resources>
    <UserControl.DataContext>
        <Binding Source="{StaticResource myDataSource}"/>
    </UserControl.DataContext>
    <ListView Margin="0,94,-4,-7" x:Name="lsvwOutput" ItemsSource="{Binding Source={StaticResource myDataSource}}"  MouseUp="lsvwOutput_MouseUp" FontFamily="Verdana">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Test Item" Width="300" …
Run Code Online (Sandbox Code Playgroud)

.net c# wpf xaml binding

8
推荐指数
2
解决办法
3万
查看次数

System.Windows.Data错误:40:BindingExpression路径错误:在对象上找不到属性

很多道歉要添加到类似的绑定错误问题的大量列表,但经过几个小时的搜索后,我找不到适合我的解决方案!

我试图在WPF中测试ViewModel,但ICommand Button代码导致标准绑定错误:

System.Windows.Data错误:40:BindingExpression路径错误:'对象'''HubManagerViewModel'(HashCode = 13328197)'上找不到'CheckforNewHubs'属性.BindingExpression:路径= CheckforNewHubs; DataItem ='HubManagerViewModel'(HashCode = 13328197); target元素是'Button'(Name ='CheckForNewHubsButton'); target属性是'Command'(类型'ICommand')

我的命令(在HubManagerViewModel中)是:

public ICommand CheckForNewHubs
{
    get
    {
        return new RelayCommand(this.CheckForNewHubsExecute, this.CanSendHubManagerCommands);
    }
    set { }
}
Run Code Online (Sandbox Code Playgroud)

我的DataContext在XAML网格中启动,如下所示:

<Grid.DataContext>
    <ViewModels:HubManagerViewModel/>
</Grid.DataContext>
Run Code Online (Sandbox Code Playgroud)

我试过显式设置按钮的dataContext,如下所示:

<Button.DataContext>
    <ViewModels:HubManagerViewModel/>
</Button.DataContext>
Run Code Online (Sandbox Code Playgroud)

谁能告诉我我做错了什么?在这一点上,我只是渴望一些新的见解.

感谢您提前的时间!

c# data-binding wpf xaml

3
推荐指数
1
解决办法
5823
查看次数