WPF:绑定到转换对象失败!
问题描述:
也许标题不完全确切,因为我不确定如何描述它。WPF:绑定到转换对象失败!
我有一个名为NSLTextBlock的用户控件,下面是NSLTextBlock的定义:
public partial class NSLTextBlock: UserControl
{
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
}
public object HighlightMatchCase
{
get { return GetValue(HighlightMatchCaseProperty); }
set
{
SetValue(HighlightMatchCaseProperty, value);
}
}
public static readonly DependencyProperty HighlightMatchCaseProperty =
DependencyProperty.Register(
"HighlightMatchCase",
typeof(object),
typeof(NSLTextBlock),
new PropertyMetadata(null, new PropertyChangedCallback(HighlightChangedCallback)));
public NSLTextBlock()
{
InitializeComponent();
}
}
}
而且HighlightMatchCase是依赖属性。
主机观点是这样的:
<ListView Name ="LogDataList" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding LogDataCollection}" Background="Cyan">
<ListView.View>
<GridView AllowsColumnReorder="true"
ColumnHeaderToolTip="Event Log Information">
<GridViewColumn Header="Event Log Name" Width="100">
<GridViewColumn.CellTemplate>
<DataTemplate>
<l:NSLTextBlock Height="25" DataContext="{Binding LogName, Converter={StaticResource DataFieldConverter}}" HighlightMatchCase="{Binding Element}" Loaded="EditBox_Loaded"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Creator" Width="100">
<GridViewColumn.CellTemplate>
<DataTemplate>
<l:NSLTextBlock Height="25" DataContext="{Binding CreatorName, Converter={StaticResource DataFieldConverter}}" HighlightMatchCase="{Binding Element}" Loaded="EditBox_Loaded"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Message" Width="100" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<l:NSLTextBlock Height="25" DataContext="{Binding Message, Converter={StaticResource DataFieldConverter}}" HighlightMatchCase="{Binding Element}" Loaded="EditBox_Loaded"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
数据字段:
public class DataField : INotifyPropertyChanged
{
private HighlightElement element;
public HighlightElement Element
{
get
{ return element; }
set
{
element = value;
OnPropertyChanged("Element");
}
}
}
其实,我想字符串(如日志名称,CreatorName和消息),以数据字段,并结合我自己转换 - 定义的属性(HighlightMatchCase)至元素(转换的数据上下文)。当我将它绑定到Element时,它抛出BindingExpressionException,无法在对象上找到属性'Element'。
我该如何解决?你有什么建议?
我真的很感激。在线上。
答
出于某种原因,NSLTextBlock的数据上下文未设置为DataField的实例。为OnDataContextChanged添加事件处理程序并使用调试器检查发生了什么。也许这是你的DataFieldConverter失败。
+0
我用诊断功能调试了datacontext,真的为我工作。 我非常重视BindingExpression异常!其实它工作正常!Wallstreet程序员,JustABill,非常感谢你节省了我的夜晚时间。 – user472843 2010-05-27 03:15:26
尝试http://bea.stollnitz.com/blog/?p=52,看看你能否得到更详细的错误? – JustABill 2010-05-26 15:09:40