前のコントロールを拡張する新しいコントロールを作成します
public sealed class MySuperiorDateTimePicker : MyDateTimePicker
{
//....
ViewModelの状態にバインドできるDependencyPropertyを追加します
public static readonly DependencyProperty HideItProperty =
DependencyProperty.Register(
"HideIt",
typeof(bool),
typeof(MySuperiorDateTimePicker ),
new UIPropertyMetadata(false, HideItPropertyChanged));
//snip property impl
プロパティが変更されるのを待ってから、UIを非表示にします
private static void HideItPropertyChanged(DependencyObject d,
DependencyPropertyChangedEventArgs e)
{
(d as MySuperiorDateTimePicker).OnHideItChanged((bool)e.OldValue,
(bool)e.NewValue);
}
private void OnHideItChanged(bool oldValue, bool newValue)
{
if(BusyTemplate == null)
return;
FindTimePicker().Visibility = newValue ? Visibility.Visible :
Visibility.Collapsed;
}
private UIElement FindTimePicker()
{
//snip null checks
return GetTemplateChild("PART_TimePicker") as UIElement;
}
FindTimePicker
コントロールがロードされる前にDPが変更され、GetTemplateChild
nullが返される可能性があるため、注意してください。通常行うことは、で、 nullを返すOnHideItChanged
場合は、後で(またはそれ以前に)イベントハンドラーを再実行するために使用します。GetTemplateChild
Dispatcher.BeginInvoke
ApplicationIdle
「MVVMを使用してUI作業を行うにはどうすればよいですか」と言ったら、やめて本当の目標を考え直してください。MVVM!=コードビハインドなし、カスタムコントロールなしなど。