2013-05-17 64 views
2

所以我有這MenuItem這是使用CultureInfo s列表作爲項目源。
我想要做的是在單擊/選擇CultureInfo時觸發一個函數,這應該會將應用程序的本地化更改爲所選的cultureinfo。 我可以放心地說,該功能正在工作,因爲它應該。 研究和嘗試幾個例子後,這是我結束了,不幸的是不起作用:在WPF中使用MenuItem的命令

<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擴展名。

回答

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> 
+0

Woahh謝謝!有用!你能解釋一下爲什麼'正常綁定'不起作用嗎?是否有其他控件的行爲相同? – Asaf

+0

嘿,看看我的評論。我解釋了爲什麼這個綁定在你的情況下不起作用。 –

1

Menu具有不同LogicalTree比Markup的其餘部分。由於這個原因,您需要首先按照Erti-Chris的建議搜索正確的DataContext

此外,每個DataTemplate都具有類型T的DataContext,它是綁定ItemsSource的List的一部分。