私の WPF 知識のギャップを埋めるのに役立つことを願っていました。
(一般的な命名を許してください。それが役立つかどうかはわかりません)
INotifyPropertyChanged を実装するカスタム オブジェクト MyObject があります。次のように、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() の両方を呼び出します。Text 値が更新され、正しい値が表示されますが、Trigger は起動しません (つまり、TextBox は移動しません)。その後いつでも、ChangeValues() を呼び出すと、Text が更新され、TextBox が移動します。
EventTrigger が最初に失敗するのはなぜですか? 前もって感謝します