iso*_*fir 8 .net c# wpf xaml binding
我一直在搜索出现在输出窗口中的这个错误.我对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" 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>
Run Code Online (Sandbox Code Playgroud)
代码背后:
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; }
Run Code Online (Sandbox Code Playgroud)
cun*_*ave 11
您不希望在UserControl上设置DataContext.相反,您希望将其设置在UserControl的范围内.
通常,您在UserControl的构造函数中执行此操作.我通常添加这样一行:
this.RootElement.DataContext = myData;
Run Code Online (Sandbox Code Playgroud)
其中RootElement是UserControl的第一个子元素(Content)(通常是Grid或StackPanel等面板).
在你的情况下,它将是:
this.lsvwOutput.DataContext = FindResource("myDataSource")
;
并确保它在 InitializeComponent()调用之后.
这只是范围界定的问题.您在usercontrol的根面板上设置datacontext.这是WPF中非常不明显的部分.
更新:正如Markus在下面指出的那样,对于listview,你想要设置一个数据数组,而不仅仅是数据点.在构造函数中设置DataContext时要考虑到这一点.
好像你将listviews itemssource绑定到一个对象,而不是一个数组.一切都在视觉上?或者你什么都看不见?
编辑:如果你写而不是:
<c:MyData x:Key="myDataSource"/>
Run Code Online (Sandbox Code Playgroud)
这个:
<x:Array x:Key="myDataSource" Type="{x:Type c:MyData}">
<c:MyData />
</x:Array>
Run Code Online (Sandbox Code Playgroud)
或任何同样的集合定义
归档时间: |
|
查看次数: |
28864 次 |
最近记录: |