在用戶控制元件中,我有資料網格的背景關系選單,如下所示
<DataGrid.ContextMenu>
<ContextMenu Focusable="False">
<menuItems:ExportMenuItemView DataContext="{Binding ExportMenuItemVM}"/>
</ContextMenu>
</DataGrid.ContextMenu>
在視圖模型類中,我有 view 屬性
public ExportMenuItemViewModel ExportMenuItemVM {get;set;}
ExportMenuItemView 是一個包含選單項的用戶控制元件
<UserControl x:Class="MenuControl.View.ExportMenuItemView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="20" d:DesignWidth="200">
<MenuItem Header="Export" Focusable="False" Command="{Binding Export}"/>
</UserControl>
下面是匯出視圖的視圖模型類
namespace MenuControl.ViewModel
{
[AddINotifyPropertyChangedInterface]
public class ExportMenuItemViewModel : ViewModelBase
{
public ExportBlockMenuItemViewModel(IExport exporter)
{
Export = new RelayCommand(() => exporter.Export());
}
public RelayCommand Export { get; set; }
}
}
單擊選單項“匯出”時,未執行 RelayCommand 匯出。我正在使用 MVVLLight
uj5u.com熱心網友回復:
我認為您在 xaml 中缺少與 DataContext 系結相關的內容,例如:
<UserControl x:Class="MenuControl.View.ExportMenuItemView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="20" d:DesignWidth="200"
DataContext="{Binding Main, Source={StaticResource Locator}}">
<MenuItem Header="Export" Focusable="False" Command="{Binding Export}"/>
</UserControl>
ViewModelLocator MVVM Light 中的 ViewModel
uj5u.com熱心網友回復:
在您的 app.xaml 中添加以下資源:
<Application x:Class="WpfApp1.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApp1"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<DataTemplate DataType="{x:Type local:ExportMenuItemViewModel}">
<local:ExportMenuItemView />
</DataTemplate>
</ResourceDictionary>
</Application.Resources>
</Application>
uj5u.com熱心網友回復:
找到解決方案我需要創建一個單獨的函式。如果我將操作呼叫為如下所示的 lambda 函式,則它不起作用
Export = new RelayCommand(() => exporter.Export());
我需要創建一個函式“foo”并在中繼命令中給出它,如下所示。我確實知道原因,但是當我如下更改代碼時,它開始作業
Export = new RelayCommand(foo);
private void foo()
{
exporter.Export()
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/496852.html
