我有一個標準菜單,其中的標題綁定到一個viewmodel中的列表,並且我想綁定來自另一個viewmodel的命令。我希望這能夠改變應用程序中的語言。我這樣定義的菜單:如何將兩個不同的屬性綁定到兩個不同的數據上下文WPF C#
<Menu DockPanel.Dock="Top" DataContext="{Binding MenuViewModel, Mode=OneWay, Source={StaticResource mainViewModel}}">
其中MenuViewModel包含所有的命令,並呼籲LanguageViewModel另一視圖模型包含了所有的報頭。然後我要每個菜單項定義是這樣的:
<MenuItem Command="{Binding Path=NewProjectCommand}">
<MenuItem.Header>
<Label DataContext="{StaticResource languageViewModel}" Content="{Binding Path=Names[menu.project.addnode]}" />
</MenuItem.Header>
</MenuItem>
這意味着只是一個菜單項至少5行代碼,菜單可能含有超過30周的MenuItems ... 有沒有簡單的方法來做到這一點?我在想模板,但不知道我會怎麼做。
什麼是'menu.project.addnode '?如果您以這種方式進行本地化,我認爲使用帶有特定於語言環境的資源的'DynamicResource'可能會更容易。但是如果你在這種方法中有一些時間,另一種選擇可能是有一個全局靜態languageviewmodel實例,只需將一個n x:Static關鍵字傳遞給一個ValueConverter,它將從languageviewmodel返回適當的值。或者更容易,給每一個常規的viewmodel一個靜態languageviewmodel的引用,這樣你就可以使用相同的DataContext。 –
您可以使附加行爲爲「MenuItem」設置標題。在xaml中看起來像這樣:''。 – Sinatr
我對每種語言都使用了所有字符串的文件,並且menu.peoject.addnode是其中一個鍵。然後我解析該文件並將所有鍵值對放入Dictionary中。我希望能夠動態地將語言添加到應用程序中,這是我認爲最好的方式。有沒有實現本地化的標準方式? –
walle