2010-12-02 7 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(); 
    } 
} 

Schaltfläche camand ist genau wie MenuItem. Wenn ich Converter für MenuItem debugge, enthält Werte Parameter zwei Objekt: DependencyProperty.UnsetValue (ich weiß nicht, was ist das) und MyContextMenu-Objekt.Warum MenuItem nicht angegebene Parameter sendet, aber Button sende

Und wie kann ich SomeType als Parameter übergeben? Danke

Antwort

1

MenuItems existieren in Popups, die sich außerhalb des visuellen Hauptbaums befinden und daher nicht den gleichen Namensumfang haben wie umgebende Elemente wie den Button. Beim Versuch, eine Bindung herzustellen, kann die ElementName-Bindung nicht aufgelöst werden, da sich das Element "Me" außerhalb des Namensbereichs des MenuItems befindet.

+0

Dank John aber was ist die Lösung oder Umgehung? – Sadegh

+0

Für Situationen wie diese sollten Sie versuchen, sich auf Daten und nicht auf UI-Elemente zu verlassen. Anstatt eine Window-Instanz an Ihr Ansichtsmodell zu übergeben, versuchen Sie, das Ansichtsmodell des Fensters oder einen Teil davon zu übergeben. Dadurch werden nicht nur Ihre V-VM-Ebenen getrennt, sondern Sie können auch den geerbten DataContext (der immer noch an MenuItems und ToolTips übergeben wird) für Ihre Bindung nutzen. –

Verwandte Themen