【发布时间】:2013-01-20 06:58:59
【问题描述】:
我只是希望你能帮助填补我在 WPF 知识方面的空白。
(请原谅通用命名,不确定是否有帮助)
我有一个自定义对象 MyObject,它实现了 INotifyPropertyChanged。它有一个名为 MyCustomProperty 的属性,如下所示;
public int MyCustomProperty
{
get { return this._myCustomProperty; }
set
{
if (this._myCustomProperty == value)
return;
this._myCustomProperty= value;
OnPropertyChanged("MyCustomProperty");
}
}
这一切都有效。 在我的 WPF 应用程序中,我有这 3 个功能;
private void DoStuff()
{
AddItemsToCanvas();
ChangeValues();
}
private void AddItemsToCanvas()
{
DataTemplate dt = (DataTemplate)FindResource("myDataTemplate");
foreach (MyObject temp in ListOfMyObjects)
{
ContentControl cc = new ContentControl();
cc.ContentTemplate = dt;
cc.Content = temp;
myCanvas.Children.Add(cc);
}
}
private void ChangeValues()
{
// this simply changes the MyCustomPropery in each of the objects
}
DataTemplate 看起来像这样;
<DataTemplate x:Key="myDataTemplate">
<Canvas>
<TextBlock Name="tb_debug" Text="{Binding Path=MyCustomProperty, NotifyOnTargetUpdated=True}">
<TextBlock.Triggers>
<EventTrigger RoutedEvent="Binding.TargetUpdated">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Storyboard.TargetName="tb_debug" Storyboard.TargetProperty="(Canvas.Top)" From="0" To="350" Duration="0:0:1.6" />
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</TextBlock.Triggers>
</TextBlock>
</Canvas>
</DataTemplate>
当 MyCustomProperty 更改时,它只是将文本框从画布的顶部移动到底部。
加载 UserControl 时,我同时调用 AddItemsToCanvas() 和 ChangeValues()。文本值更新并显示正确的值,但触发器不触发(即文本框不移动)。 在那之后的任何时候,当我调用 ChangeValues() 时,文本会更新并且文本框会移动。
为什么 EventTrigger 会在初始时间失败? 提前致谢
【问题讨论】:
-
您能否提供一个小而完整的问题示例?然后尝试从零碎中找出问题会容易得多......
-
我不确定我是否可以 - 这个 UserControl 有大约 3000 行代码,加上类本身也差不多。
标签: wpf inotifypropertychanged eventtrigger