【发布时间】:2011-07-19 22:10:44
【问题描述】:
我一直在寻找出现在输出窗口中的这个错误的几个小时。我对 WPF 中的绑定很陌生,所以我确定我缺少一些东西。
错误全文(每个绑定路径都有一个,都和这个类似):
System.Windows.Data 错误:39:BindingExpression 路径错误:在“对象”“字符串”(HashCode=-842352750)上找不到“TestItem”属性。绑定表达式:路径=测试项; DataItem='String' (HashCode=-842352750);目标元素是'TextBlock'(名称='');目标属性是“文本”(类型“字符串”)
编辑:似乎一切正常,但我在输出窗口中收到这些错误。
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" DisplayMemberBinding="{Binding Path=TestItem}" />
<GridViewColumn Header="Information" Width="0" DisplayMemberBinding="{Binding Path=Information}"/>
<GridViewColumn Header="Result" Width="0" DisplayMemberBinding="{Binding Path=PassFail}"/>
<GridViewColumn Header="Result" CellTemplate="{StaticResource image}" />
</GridView>
</ListView.View>
</ListView
</UserControl>
后面的代码:
public class MyData : INotifyPropertyChanged
{
private string _testitem = "";
private string _information = "";
private string _passfail = "";
public string TestItem {
get { return _testitem; }
set
{
_testitem = value;
OnPropertyChanged("TestItem");
}
}
public string Information {
get { return _information; }
set
{
_information = value;
OnPropertyChanged("Information");
}
}
public string PassFail {
get { return _passfail; }
set
{
_passfail = value;
OnPropertyChanged("PassFail");
}
}
public string Text { get; set; }
【问题讨论】:
-
为什么要为 ItemsSource 设置一个不可枚举的对象?
-
@Moses 我现在已经多次更改了我的 ItemsSource,查看不同的示例。我不太了解应该去那里。我提出的代码是我尝试的最后一次迭代,不一定是我最初会做的。