Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 为什么MenuItem没有';不发送指定参数,但按“发送”按钮 公共类TrayWindowViewModelConverter:IMultiValueConverter{ 公共对象转换(对象[]值,类型targetType,对象参数,CultureInfo区域性){ var viewModel=new Window1ViewModel(); foreach(值中的var obj){ 如果(obj是窗口) viewModel.Caller=obj作为窗口; else if(obj是字符串) viewModel.ServiceName=obj.ToString(); } 返回视图模型; } 公共对象[]转换回(对象值,类型[]目标类型,对象参数,CultureInfo区域性){ 抛出新的NotImplementedException(); } }_Wpf_Routed Commands_Imultivalueconverter - Fatal编程技术网

Wpf 为什么MenuItem没有';不发送指定参数,但按“发送”按钮 公共类TrayWindowViewModelConverter:IMultiValueConverter{ 公共对象转换(对象[]值,类型targetType,对象参数,CultureInfo区域性){ var viewModel=new Window1ViewModel(); foreach(值中的var obj){ 如果(obj是窗口) viewModel.Caller=obj作为窗口; else if(obj是字符串) viewModel.ServiceName=obj.ToString(); } 返回视图模型; } 公共对象[]转换回(对象值,类型[]目标类型,对象参数,CultureInfo区域性){ 抛出新的NotImplementedException(); } }

Wpf 为什么MenuItem没有';不发送指定参数,但按“发送”按钮 公共类TrayWindowViewModelConverter:IMultiValueConverter{ 公共对象转换(对象[]值,类型targetType,对象参数,CultureInfo区域性){ var viewModel=new Window1ViewModel(); foreach(值中的var obj){ 如果(obj是窗口) viewModel.Caller=obj作为窗口; else if(obj是字符串) viewModel.ServiceName=obj.ToString(); } 返回视图模型; } 公共对象[]转换回(对象值,类型[]目标类型,对象参数,CultureInfo区域性){ 抛出新的NotImplementedException(); } },wpf,routed-commands,imultivalueconverter,Wpf,Routed Commands,Imultivalueconverter,按钮cammand与菜单项完全相同。调试MenuItem的转换器时,values参数包含两个对象:DependencyProperty.UnsetValue(我不知道这是什么)和MyContextMenu对象 还有,我如何传递SomeType作为参数? 感谢菜单项存在于主视觉树之外的弹出窗口中,因此与周围的元素(如按钮)没有相同的名称范围。尝试绑定时,ElementName绑定无法解析,因为“Me”元素不在MenuItem的名称范围内。在这种情况下,您应该尝试依赖数据而不是UI元素。与其将窗口实

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

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

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

在这种情况下,您应该尝试依赖数据而不是UI元素。与其将窗口实例传递给视图模型,不如尝试传递窗口的视图模型或其部分。这样做不仅可以分离您的V-VM层,还可以让您利用继承的DataContext(仍然传递给菜单项和工具提示)进行绑定。
<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();
    }
}