【问题标题】:BindingExpression path error: 'SystemParameters'BindingExpression 路径错误:'SystemParameters'
【发布时间】:2022-01-18 12:18:12
【问题描述】:

在更新我的软件时,我开始遇到这个BindingExpression 错误。

System.Windows.Data 错误:40:BindingExpression 路径错误:在“对象”“MainViewModel”(HashCode=4781813)上找不到“SystemParameters”属性。 BindingExpression:Path=SystemParameters.PrimaryScreenHeight; DataItem='MainViewModel' (HashCode=4781813);目标元素是'MainWindow'(名称='XXX');目标属性是“高度”(类型“双”)

System.Windows.Data 错误:40:BindingExpression 路径错误:在“对象”“MainViewModel”(HashCode=4781813)上找不到“SystemParameters”属性。 BindingExpression:Path=SystemParameters.PrimaryScreenWidth; DataItem='MainViewModel' (HashCode=4781813);目标元素是'MainWindow'(名称='XXX');目标属性是“宽度”(类型“双”)*

看了上面的错误,好像在MainViewModel中找不到SystemParameters对象。

<Window x:Name="XXXX" x:Class="XXXX.Views.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:local="clr-namespace:XXXX"
    xmlns:localize="http://gu.se/Localization"
    xmlns:properties="clr-namespace:XXXX.Properties"
    mc:Ignorable="d"
    d:DesignHeight="1080" d:DesignWidth="1920"
    Title=""
    WindowStyle="None"
    ResizeMode="NoResize"
    WindowStartupLocation="CenterScreen" WindowState="{Binding WindowState, Mode=TwoWay}"
    DataContext="{Binding Main, Source ={StaticResource Locator}}"
    Height="{Binding SystemParameters.PrimaryScreenHeight}" 
    Width="{Binding SystemParameters.PrimaryScreenWidth}" Background="#FFCCCCCC">

   <Window.Resources>

当我启动我的应用程序时,Initializer.cs 类被调用,该类初始化所有参数并创建MainWindow 的实例。通过调试,我发现我调用window.Show()方法时似乎出现了这个问题,然后我的应用程序立即崩溃了。

MainWindow window = new MainWindow();
window.Show();

【问题讨论】:

  • MainViewModel 中显然没有公开的 SystemParameters 属性。
  • 你可能想写{x:Static SystemParameters.PrimaryScreenWidth}而不是{Binding SystemParameters.PrimaryScreenWidth}
  • @Clemens 添加 x:static 现在显示不同的错误“Windows Presentation Foundation (WPF) 项目不支持静态”。
  • @amrit2 区分大小写很重要,x:Staticx:static 不同(错误)。除此之外,Visual Studio 可能存在问题,请参阅相关问题 here。尝试卸载并重新加载项目。

标签: c# .net wpf xaml data-binding


【解决方案1】:

默认情况下,Binding 将使用元素的DataContext 解析属性路径(这是继承的)。 PrimaryScreenHeightPrimaryScreenWidth 属性是 staticSystemParameters 类型的一部分,它是 static 类型,不属于数据上下文。要解决此问题,您可以:

  • 使用x:Static 标记扩展来引用静态属性。

    实现返回静态字段和属性引用的标记扩展。

    Height="{x:Static SystemParameters.PrimaryScreenHeight}"
    Width="{x:Static SystemParameters.PrimaryScreenWidth}"
    
  • 如果您需要应用一个值转换器,您可以使用x:Static 标记扩展为Source

    Height="{Binding Source={x:Static SystemParameters.PrimaryScreenHeight}, Converter={StaticResource MyConverter}}"
    Width="{Binding Source={x:Static SystemParameters.PrimaryScreenWidth}, Converter={StaticResource MyConverter}}"
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多