当前位置: 首页 > 知识库问答 >
问题:

在XAML中绑定整数不会导致错误

应和悦
2023-03-14

我是WPF/XAML的新手。如果绑定到XAML中错误的数据类型,我希望得到一条错误消息。XAML似乎希望所有绑定都通过字符串进行,但是如果错误地使用int或double则不会出现错误消息。

我在这里找到了以下XAML代码:

<ItemsControl ItemsSource="{Binding Path=PointList}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <!--<TextBox Text="{Binding Path=Xstr, Mode=OneWay}" />-->
            <Rectangle Fill="Red" Width="25" Height="25" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
    <ItemsControl.ItemContainerStyle>
        <Style>
            <Setter Property="Canvas.Top" Value="{Binding Path=Ystr}" />
            <Setter Property="Canvas.Left" Value="{Binding Path=Xstr}" />
        </Style>
    </ItemsControl.ItemContainerStyle>
</ItemsControl>

我发现绑定可以在int属性上工作,但不能在公共int字段上工作。下面是我创建的一个Point类来测试它:

class Point
{
    public int _X; //I know this is usually private, this is to demonstrate
    public int _Y; //the issue with binding to a public field
    public string Xstr
    {
        get { return _X.ToString(); }
    }
    public string Ystr
    {
        get { return _Y.ToString(); }
    }
    public int X
    {
        get { return _X; }
        private set { _X = value; }
    }
    public int Y
    {
        get { return _Y; }
        private set { _Y = value; }
    }

    public Point(int x, int y)
    {
        _X = x;
        _Y = y;
    }
} 

如果绑定到int属性X或string属性Xstr,它可以正常工作。如果我尝试使用公共字段_x,那么绑定似乎找不到类成员(即使它是公共的)。因此,当绑定失败时,行为与代码中的异常不同。输出窗口中会出现如下错误,但应用程序不会停止:

System.Windows.Data Error: 40 : BindingExpression path error: '_X' property not found on 'object' ''Point' (HashCode=7877106)'. BindingExpression:Path=_X; DataItem='Point' (HashCode=7877106); target element is 'ContentPresenter' (Name=''); target property is 'Left' (type 'Double')

共有1个答案

狄彬彬
2023-03-14

数据绑定可以使用任何数据类型。绑定系统调用“ToString”或每个项上的内置转换器,以获得XAML的表示形式。(您可以通过编写自己的转换器来解决这个问题,这完全是一个XAML主题。)

其他人是正确的,当绑定出现问题时。NET不会抛出错误。帮助编写它的微软员工告诉我,这是有意的。他们称之为“优雅地失败”。

但是获得错误消息反馈是可能的。若要从绑定系统获得更好的错误消息,请在Visual Studio中找到“工具”、“选项”菜单项。然后,转到“调试”部分并选择“输出窗口”属性类别。

其中一个条目是一个名为“WPF跟踪设置”的组。将“数据绑定”选项更改为“警告”,您将获得所有失败绑定的调试窗口反馈。

 类似资料:
  • 我的依赖树和多个SLF4J绑定有问题。到目前为止,我发现这通常只会引起一个警告,但在我的情况下,它似乎会阻止我的程序运行:以下是我得到的例外情况: SLF4J:类路径包含多个SLF4J绑定。slf4j:在[jar:file:/c:/users/fischerni/.m2/repository/org/slf4j/slf4j-jdk14/1.5.3/slf4j-jdk14-1.5.3.jar!/or

  • 我试图运行一个依赖于某些python3库的PySpark作业。我知道我可以在Spark Cluster上安装这些库,但是因为我正在为多个作业重用集群,所以我更愿意捆绑所有依赖项,并通过指令将它们传递给每个作业。 为此,我使用: 它有效地压缩了需要在根级别使用的包中的所有代码。 在my中,我可以导入依赖项 并将.zip添加到我的Spark上下文中 到目前为止还不错。 但出于某种原因,这将在星火星团的

  • 方言设置为java,我的drools版本是6.4.0。我如何避免这个错误? 编辑:字符串到int:

  • 问题内容: 遇到一个错误地使用 而不是 在其代码中的人,它没有显示为编译错误。 是因为 是相同的 ? 问题答案: 没有编译错误,因为它是有效的(尽管相当无用) 一元运算符 ,其使用方式与以下方式相同: Java语言规范中的相关部分是Unary Plus运算符+(第15.15.3节) 。它指定调用一元运算会导致操作数的一元数值提升(第5.6.1节)。这意味着: * 如果操作数是编译时类型的,,,或,

  • 我正试图在我的WPF项目中设置一个TextEdit框,但我的掩码有一些问题。 XAML:

  • 我最近下载并安装了Jmet2.11。之后我尝试了该程序的记录功能,但这导致了一条错误消息:“无法创建脚本记录代理-有关详细信息,请参阅日志”。 我尝试过修改“环境变量”,但那没有帮助。 在应用程序的日志中显示了以下消息。 2014/08/19 10:23:02警告-jmeter。协议http。代理ProxyControl:无法打开/读取密钥存储C:\apache-jmeter-2.11\bin\p