从代码背后调用UIElement命令

本文关键字:UIElement 命令 调用 背后 代码 | 更新日期: 2023-09-27 17:58:46

我正试图利用UiElement从代码后台执行绑定命令。button.Command.Execute(button.CommandParameter)

但是,此时按钮的Command属性为null。同时,当我在视图模型中检查该命令时,该属性已设置。我能想到的唯一诊断是,在窗口真正可见之前,命令不会绑定到按钮的命令属性。我觉得我可能在某个地方错过了一步,或者我的实现不健全。下面是一些代码片段,如果你需要更多,请告诉我。

窗口构造函数:

public PlottingViewModel ViewModel { get; set; }
public PlottingGUI()
{
    InitializeComponent();
    DataContext = (ViewModel = new PlottingViewModel());
    _setDefaultSelections();
}
IList<RadioButton> buttons;

设置默认选择:

private void _setDefaultSelections()
{
    buttons = new List<RadioButton>();
    _getRadioButtons(this);
    foreach (var setting in ViewModel.Settings.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public))
    {
        var settingValue = setting.GetValue(ViewModel.Settings);
        var button = buttons.FirstOrDefault(btn => btn.Content.Equals(settingValue)
                || ((string)btn.CommandParameter).Equals(settingValue));
        if (button == null)
            continue;
        button.IsChecked = true;
        // NullReference here
       // button.Command.Execute(button.CommandParameter);
    }
}

RadioButtons XAML之一:

<RadioButton Content="None"
             Grid.Row="0"
             Command="{Binding StampedCommand}"
             CommandParameter="None"
             Foreground="WhiteSmoke"/>

我觉得,我能够成功完成这项任务的唯一方法是直接从我的视图模型中执行命令。(我不想这么做)

感谢阅读。。

从代码背后调用UIElement命令

为了总结调用_setDefaultSelections()时的注释,绑定尚未更新,因此Command仍然为null,因此必须等待所有内容都加载完毕。您可以在Loaded事件期间调用_setDefaultSelections

在元素布局、呈现并准备好进行交互时发生。