【问题标题】:WPF Command Binding on Code Behind problemWPF命令绑定代码隐藏问题
【发布时间】:2021-07-19 10:42:31
【问题描述】:

我是 WPF 新手,我创建了一个 WPF 应用程序。在该应用程序中,我有一个包含如下按钮的 UserControl,

<UserControl.DataContext>
    <local:AppViewModel/>
</UserControl.DataContext>

<Grid>
    <Button x:Name="Btn_Contact" Command="{Binding BookVM.LoadContactsCommand}" Click="Btn_Contact_Click"/>
</Grid>

我的 AppViewModel 类如下

public AppViewModel()
    {
        var dataService = new JsonContactDataService();                   
        BookVM = new BookViewModel(dataService);
        CurrentView = BookVM;
    }

我的问题是我希望这个 UserControl 在加载 UserControl 而不是单击按钮时自动运行 Btn_Contact 的命令。我尝试在 UserControl 代码隐藏上编写命令绑定,但它不起作用。

public UserControlMemo()
    {
        InitializeComponent();
        Btn_Contact.RaiseEvent(new RoutedEventArgs(Button.ClickEvent));
        Btn_Contact.SetBinding(Button.CommandProperty, new Binding("BookVM.LoadContactsCommand"));
    }

【问题讨论】:

  • 所以按钮点击指向一个函数/命令——“BookVM.LoadContactsCommand”——为什么不调用目标函数而不是引发点击事件?
  • 我同意。不要在没有点击时伪造点击事件。您的用户控件有一个加载的事件。您可以执行每个 ICommand。 BookVM.LoadContactsCommand.Execute()。这就是你在后面的代码中要做的所有事情
  • ICommand。图书虚拟机。加载联系人命令。 Execute(): 没有成功。

标签: c# wpf binding command


【解决方案1】:

最简单的形式:

public UserControlMemo()
{
    Loaded += OnLoaded;
    InitializeComponent();
}

private void OnLoaded(object sender, RoutedEventArgs e)
{
    if (DataContext is AppViewModel viewModel) 
        viewModel.BookVM.LoadContactsCommand.Execute(null);
}

【讨论】:

  • 非常感谢先生。这就是我需要的。
猜你喜欢
  • 2010-12-05
  • 1970-01-01
  • 2013-10-17
  • 2012-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多