【发布时间】:2015-06-01 12:46:32
【问题描述】:
我正在尝试在 DataGridTemplateColumn 内的自定义控件中绑定一个值,但绑定似乎不起作用。
我的 DataGridTemplateColumn :
<DataGridTemplateColumn Width="auto" SortMemberPath="Etat" CanUserReorder="False" CanUserResize="True" x:Name="colonneEtat">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate />
</DataGridTemplateColumn.CellEditingTemplate>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<widget:MyWidget MyObject="{Binding MyObjectVariable, Converter={StaticResource MyDebugConverter}}" Margin="5,0" VerticalAlignment="Center"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
我的自定义控件现在只包含一个 Grid,但它的属性定义如下:
public static readonly DependencyProperty MyObjectProperty=
DependencyProperty.Register("MyObject",
typeof(ObjectType),
typeof(MyWidget),
new PropertyMetadata(null));
public ObjectType MyObject
{
get { return (ObjectType)GetValue(MyObjectProperty); }
set {
SetValue(MyObjectProperty, value);
FillCustomControl();
}
}
Debug Converter 只是一个用于测试绑定的虚拟转换器:
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
System.Diagnostics.Debugger.Break();
return value;
}
我的自定义控件工作正常,我已经在我的应用程序的另一个地方尝试过。它的功能很简单:设置属性时,我根据属性中的内容填充自定义控件。如前所述,这种行为已经过测试。
但在此 DataGridTemplateColumn 的情况下,该属性永远不会设置。我在输出中没有任何绑定错误,并且调试器在转换器中停止 + 转换器中的值是预期的值。但由于某种原因,它没有在我的自定义控件中设置属性的值。
我错过了什么?
谢谢
【问题讨论】:
-
我很困惑。您的
MyObject属性是在MyWidget上定义的,但是您对MyWidget的使用使用了一个名为ObjectProperty的属性并尝试将其绑定到MyObject。ObjectProperty是什么?这个专栏在哪里? -
确实有两个同名对象……我已经改了,但还是不行。
-
我并不是在暗示这就是它不起作用的原因,目前还不清楚您要做什么。我们仍然不知道
MyObjectVariable在哪里,您可能在内部使用MyWidget中的DataContext' 等等。如果您可以提供minimal, complete, verifiable example 以便有人可以重现您的问题,这将很有帮助。答案最多只能是猜测。 -
使用 snoop 我可以看到我的属性已设置,但我的属性的“设置”方法从未被调用,我想这就是问题所在。我将使用 Dependencyproperty 上的更改事件来解决此问题。