【发布时间】:2021-11-25 17:14:18
【问题描述】:
我正在构建一个 WPF MVVM 应用程序。我正在尝试在 Grid 中加载 UserControl,但 OnLoaded 方法不会触发。
这里是UserControl中的EventTrigger,叫Selector:
<b:Interaction.Triggers>
<b:EventTrigger EventName="Loaded">
<b:InvokeCommandAction Command="{Binding OnLoadedCommand}" />
</b:EventTrigger>
</b:Interaction.Triggers>
这是SelectorViewModel中的代码:
public RelayCommand OnLoadedCommand { get; set; }
public SelectorViewModel(MapService mapService)
{
this.mapService = mapService ?? throw new ArgumentNullException(nameof(mapService));
OnLoadedCommand = new RelayCommand(OnLoaded);
}
public async void OnLoaded()
{
AvailablePositions = await mapService.GetPositions();
//other code
}
UserControl 加载到的网格的View:
<local:Selector Grid.Row="0" Margin="{StaticResource SmallLeftTopMargin}" />
网格的ViewModel,UserControl 被加载到:
public SelectorViewModel SelectorViewModel { get; set; }
public MapViewModel(MapService mapService)
{
SelectorViewModel = new SelectorViewModel(mapService);
}
根本没有调用该方法的可能原因是什么?我在SelectorViewModel 的构造函数中放了一个断点,它命中了它,但它没有命中OnLoaded() 中的那个。
方法是async这个事实有问题吗?
编辑:
我尝试将命令设置为:
OnLoadedCommand = new RelayCommand(async () => await OnLoaded());
并将OnLoaded 的返回类型从void 更改为Task,但仍然无效。
【问题讨论】:
标签: c# wpf datagrid user-controls