【问题标题】:Calling UIElement Command from code behind从后面的代码调用 UIElement 命令
【发布时间】:2014-06-02 05:25:46
【问题描述】:

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

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

窗口构造函数:

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

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

感谢阅读..

【问题讨论】:

  • 您是否尝试在Loaded 事件中调用_setDefaultSelections

标签: c# xaml data-binding mvvm viewmodel


【解决方案1】:

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

在元素布局、渲染并准备好交互时发生。

【讨论】:

    猜你喜欢
    • 2012-04-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-06
    • 2011-12-02
    相关资源
    最近更新 更多