从后面的代码调用UIElement命令

时间:2014-04-17 19:18:16

标签: c# xaml data-binding mvvm viewmodel

我正在尝试使用UiElement从我的代码中执行绑定命令。 button.Command.Execute(button.CommandParameter)

但是,此时按钮的Command属性为null。同时当我在View Model中检查命令时,属性已设置。我能想到的唯一诊断是,在窗口实际可见之前,命令不会绑定到按钮的命令属性。我觉得我可能在某个地方错过了一个步骤,或者我的实现不合理。下面是代码的一些内容,如果您需要更多内容,请与我们联系。

窗口构造函数:

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"/>

我觉得,我能够成功完成此任务的唯一方法是直接从我的viewmodel执行命令。 (我不想做)

感谢您阅读..

1 个答案:

答案 0 :(得分:1)

当您调用_setDefaultSelections()绑定尚未更新时,总结注释,因此Command仍然为空,因此您必须等到所有内容都加载完毕。您可以在_setDefaultSelections活动

期间致电Loaded
  

在布置,渲染元素并准备好进行交互时发生。