2

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

<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扩展。

4

2 回答 2

3

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

    <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>
于 2013-05-17T04:58:12.110 回答
1

AMenu的 LogicalTree 与Markup. DataContext出于这个原因,您需要按照 Erti-Chris 的建议先搜索正确的。

此外,每个 DataTemplate 都有 T 类型的 DataContext,它是绑定 ItemsSource 列表的一部分。

于 2013-05-17T08:43:58.943 回答