2010-12-02 13 views
0
<MenuItem Command="local:CommandLibrary.RegisterServiceCommand"> 
    <MenuItem.CommandParameter> 
     <MultiBinding Converter="{StaticResource TrayWindowViewModelConverterResource}"> 
      <MultiBinding.Bindings> 
       <Binding ElementName="Me" /> 
       <Binding FallbackValue="Parser" /> 
      </MultiBinding.Bindings> 
     </MultiBinding> 
    </MenuItem.CommandParameter> 
</MenuItem> 

public class TrayWindowViewModelConverter : IMultiValueConverter { 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) { 
     var viewModel = new Window1ViewModel(); 

     foreach (var obj in values) { 
      if (obj is Window) 
       viewModel.Caller = obj as Window; 
      else if (obj is string) 
       viewModel.ServiceName = obj.ToString(); 
     } 

     return viewModel; 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) { 
     throw new NotImplementedException(); 
    } 
} 

ボタンcammandはMenuItemとまったく同じです。 MenuItemのConverterをデバッグすると、valuesパラメータにDependencyProperty.UnsetValue(これは何であるか分かりません)とMyContextMenuオブジェクトの2つのオブジェクトが含まれています。MenuItemが指定されたパラメータを送信しない理由は何ですか?ボタン送信

また、どのようにSomeTypeをパラメータとして渡すことができますか? ありがとう

答えて

1

MenuItemsは、メインのビジュアルツリーの外にあるので、あなたのボタンのように周囲の要素と同じ名前の範囲を持たないポップアップに存在します。バインドしようとすると、 "Me"要素がMenuItemの名前スコープの外にあるため、ElementNameバインディングを解決できません。

+0

ジョンさんありがとうございましたが、解決策や回避策は何ですか? – Sadegh

+0

このような状況では、UI要素ではなくデータに頼るべきです。ウィンドウインスタンスをビューモデルに渡すのではなく、ウィンドウのビューモデルまたはその一部を渡してみてください。そうすることで、V-VMレイヤーを分離するだけでなく、Bindingの継承されたDataContext(MenuItemsとToolTipsに引き続き渡される)を利用できるようになります。 –

関連する問題