我是 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>
我使用了一个可观察的 PointList of Points(X,Y) 集合。我一开始犯了一个错误,就是对 X 和 Y 使用整数而不是字符串。这很难调试,因为尝试将 Canvas.Top 绑定到整数时没有错误消息。Visual Studio 中是否有能够捕获此类错误的设置?
更新
我发现绑定适用于 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')