【问题标题】:Why MenuItem doesn't send specified parameters but Button send为什么 MenuItem 不发送指定参数而是发送 Button
【发布时间】:2010-12-02 08:02:36
【问题描述】:
<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();
    }
}

Button cammand 与 MenuItem 完全相同。当我为 MenuItem 调试转换器时,values 参数包含两个对象:DependencyProperty.UnsetValue(我不知道这是什么)和 MyContextMenu 对象。

还有我如何将 SomeType 作为参数传递? 谢谢

【问题讨论】:

    标签: wpf routed-commands imultivalueconverter


    【解决方案1】:

    MenuItems 存在于主视觉树之外的弹出窗口中,因此与周围元素(如您的按钮)的名称范围不同。尝试绑定时,ElementName 绑定无法解析,因为“Me”元素超出了 MenuItem 的名称范围。

    【讨论】:

    • 对于这种情况,您应该尝试依赖数据而不是 UI 元素。与其将 Window 实例传递给您的视图模型,不如尝试传递 Window 的视图模型或其一部分。这样做不仅会分离您的 V-VM 层,而且可以让您利用继承的 DataContext(仍然传递给 MenuItems 和 ToolTips)进行绑定。
    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 2011-10-23
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多