我正在尝试使用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执行命令。 (我不想做)
感谢您阅读..
答案 0 :(得分:1)
当您调用_setDefaultSelections()
绑定尚未更新时,总结注释,因此Command
仍然为空,因此您必须等到所有内容都加载完毕。您可以在_setDefaultSelections
活动
Loaded
在布置,渲染元素并准备好进行交互时发生。