私はDependencyObject
のビューモデルを持っていますが、DependencyProperty
はビューを新しい値で更新していません。DependencyObjectはビューを更新していません
サンプルプロパティは(予想通り取得/設定ラッパーが呼び出されます)
public static readonly DependencyProperty WeaponNameProperty = DependencyProperty.Register(
"WeaponName",
typeof(string),
typeof(WeaponSystemVM),
new PropertyMetadata(null, new PropertyChangedCallback(OnWeaponNameChanged)));
public string WeaponName
{
get { return (string)GetValue(WeaponNameProperty); }
set { SetValue(WeaponNameProperty, value); }
}
Callback
(WeaponName
が変更されたときに呼び出される)
private static void OnWeaponNameChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
WeaponSystemVM vm = d as WeaponSystemVM;
if (vm != null)
{ vm.CommandAddWeaponSystem.RaiseCanExecuteChanged(); }
}
CanExecute Delegate
(期待通りに実行します関連するアップデート:Button
)
private bool CanAddSystem()
{
if (string.IsNullOrWhiteSpace(WeaponName)) return false;
if (string.IsNullOrWhiteSpace(WeaponLock)) return false;
if (string.IsNullOrWhiteSpace(WeaponDamage)) return false;
if (string.IsNullOrWhiteSpace(WeaponAttack)) return false;
return true;
}
入力TextBox
<TextBox x:Name="NameInput" Text="{Binding WeaponName, Mode=TwoWay}" Margin="12,4" RelativePanel.Below="NameAdorner" RelativePanel.AlignLeftWithPanel="True"
RelativePanel.AlignRightWithPanel="True"/>
出力TextBlock
(新しい値で更新し、DataContext
を入力TextBox
と同じではありません)
<TextBlock Text="{Binding WeaponName}"/>
はイライラ、それだけでこの実装のようですそれは動作していません。
問題を再現するために、私は自分のアプリに関連するすべての追加情報なしで別個のプロジェクトを作成しました。ビューは期待どおりに正確に更新されています。
私が理解していないことは、この実装で正しく行われていないことです。 ViewModelは期待どおりに更新されています。バインディングはLiveVisualTree
に従って有効です。
誰も私に問題を指摘できますか?
なぜ、UIクラスから継承するVMを作成するのかわからない。それは私にとって間違っていると感じます。通常、依存関係のプロパティの代わりにINPCを使用してプロパティを作成します。 – Jessica