c# - 在 WPF 中使用带有 MenuItem 的命令

标签 c# wpf mvvm

所以我有这个 MenuItem它正在使用 CultureInfo 的列表s 作为元素来源。
我想做的是在 CultureInfo 时触发一个函数。单击/选择,这应该将应用程序的本地化更改为所选的 cultureinfo。 我可以肯定地说该功能正在按预期工作。 在研究并尝试了几个例子之后,这就是我最终得到的结果,不幸的是它不起作用:

<MenuItem Header="{lex:LocText MenuLanguages}" ItemsSource="{Binding LanguageList}" DisplayMemberPath="Name">
        <MenuItem.ItemContainerStyle>
            <Style>
                <Setter Property="MenuItem.Command" Value="{Binding SetLanguage}" />
                <Setter Property="MenuItem.CommandParameter" Value="{Binding}" />
            </Style>
        </MenuItem.ItemContainerStyle>
</MenuItem>

命令:

    private ICommand _SetLanguage;
    public ICommand SetLanguage
    {
        get
        {
            if (_SetLanguage == null)
                _SetLanguage = new RelayCommand(ChangeLanguage);
            return _SetLanguage;
        }
    }

    public void ChangeLanguage(object langChosen)
    {
        LocalizeDictionary.Instance.Culture = CultureInfo.GetCultureInfo(langChosen.ToString());
    }

CultureInfo.GetCultureInfo()以字符串作为参数。
itemsource 基本上是一个 ObservableCollection<CultureInfo> .

我的问题是上面的代码可能有什么问题?我一直在尝试很多“解决方案”,但没有任何效果......
当我从列表中选择一个项目时,什么也没有发生。

*我还尝试在 ChangeLanguage 上设置断点方法,这使我得出一个结论,该方法甚至从未触发过。

使用 caliburn.microWPFLocalizationExtension扩大。

最佳答案

如果不起作用,则绑定(bind)错误。检查调试窗口中的绑定(bind)错误。 您需要使用 relativesource,因为直接绑定(bind)不会做您认为会做的事情。

    <MenuItem Header="_Recent files" ItemsSource="{Binding RecentFiles, Converter={StaticResource RecentFilesToListOfStringsConverter}, Mode=OneWay}" >
    <MenuItem.ItemContainerStyle>
        <Style TargetType="{x:Type MenuItem}">
            <Setter Property="Command" Value="{Binding DataContext.ImportRecentItemCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type MenuItem}, AncestorLevel=1}}" />
            <Setter Property="CommandParameter" Value="{Binding}" />
        </Style>
    </MenuItem.ItemContainerStyle>
</MenuItem>

关于c# - 在 WPF 中使用带有 MenuItem 的命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16601459/

相关文章:

c# - 使用 from...to 范围声明 int 变量

wpf - 将控件绑定(bind)到两个属性

c# - 实现WPF MVVM对话框服务

c# - 希望通过异步调用提高我的 WebService 的速度,但不确定如何

c# - 从 C# .net 调用 python.py

c# - 如何将 JSON 对象读取到 WebAPI

Swift MVVM - 使用协议(protocol)来处理 viewModel 事件

c# - 具有效果的Windows 8.1应用程序音频(NAudio或SharpDX)

c# - 在 WPF 中编写 VTK 应用程序,尝试遵循 MVVM

Silverlight 绑定(bind)值错误