XAML 交互触发器未触发命令

w6lpcovy  于 2022-12-07  发布在  其他
关注(0)|答案(1)|浏览(204)

我遇到窗口的Loaded事件问题,因此我使用NuGet包

我做了一切需要使用这个链接https://devblogs.microsoft.com/dotnet/open-sourcing-xaml-behaviors-for-wpf/
我的xaml:

  1. <Window x:Class="TestDynamicWindow.MainWindow"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5. xmlns:b="http://schemas.microsoft.com/xaml/behaviors"
  6. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  7. xmlns:local="clr-namespace:TestDynamicWindow" d:DataContext="{d:DesignInstance Type=local:MainViewModel}"
  8. mc:Ignorable="d"
  9. Title="UserWindow" Height="450" Width="800"
  10. ResizeMode="NoResize"
  11. Background="Bisque"
  12. >
  13. <b:Interaction.Triggers>
  14. <b:EventTrigger EventName="Loaded">
  15. <b:InvokeCommandAction
  16. CommandParameter="{Binding ElementName=ButtonsListBox, Path=Items.Count}"
  17. Command="{Binding LoadDataCommand}"/>
  18. </b:EventTrigger>
  19. </b:Interaction.Triggers>

WindowDataContext是主视图模型类:

  1. public class MainViewModel
  2. {
  3. private readonly string path = $"{Environment.CurrentDirectory}\\LogInModels.xml";
  4. public ObservableCollection<LinkModel> linkModels { get; set; } = new ObservableCollection<LinkModel>();
  5. public ObservableCollection<LogInModel> LogInModels { get; set; }
  6. public ICommand LoadDataCommand { get; set; }
  7. public ICommand AddLinkCommand { get; set; }
  8. public MainViewModel()
  9. {
  10. this.LoadDataCommand = new CommandInterface(LoadData, CanLoadData);
  11. this.AddLinkCommand = new CommandInterface(AddLink, CanAddLink);
  12. }
  13. #region LoadDataMethods
  14. public void LoadData(object parameter)
  15. {
  16. SaveOrGetData saveOrGet = new SaveOrGetData(path);
  17. LogInModels = saveOrGet.GetData();
  18. for(int i = 0; i < LogInModels.Count; i++)
  19. {
  20. LinkModel lm = new LinkModel(parameter);
  21. linkModels.Add(lm);
  22. }
  23. }
  24. public bool CanLoadData(object parameter)
  25. {
  26. return true;
  27. }

}
正如您在MainViewModel构造函数中看到的那样,LoadDataCommand应该激发LoadData()方法,但我在该行上放置了一个断点,当加载Window时,什么都没有发生。我没有收到任何错误,它根本就不起作用。我是这个概念的新手,所以我不知道哪里出了问题。我认为我使用InteractionTriggers的方式不对,但我可以'I don“我找不到任何能帮助正确使用它的东西。

CommandInterface类别只是实作ICommand的类别

  1. class CommandInterface : ICommand
  2. {
  3. Action<object> executeMethod;
  4. Func<object, bool> canExecuteMethod;
  5. public CommandInterface(Action<object> executeMethod, Func<object, bool> canExecuteMethod)
  6. {
  7. this.executeMethod = executeMethod;
  8. this.canExecuteMethod = canExecuteMethod;
  9. }
  10. public bool CanExecute(object parameter)
  11. {
  12. return true;
  13. }
  14. public void Execute(object parameter)
  15. {
  16. executeMethod(parameter);
  17. }
  18. public event EventHandler CanExecuteChanged;
  19. }
uyto3xhc

uyto3xhc1#

我不知道为什么,但d:DataContext="{d:DesignInstance Type=local:MainViewModel}"这不工作的Loaded事件,所以我设置DataContext的视图到MainViewModel示例在代码背后(InitializeComponents后)它的工作.如果它不工作,只是改变ICommand实现,在这个问题的答案之一:How to use the CanExecute Method from ICommand on WPF

相关问题