【问题标题】:WPF 4.0 InvokeCommandAction Compatibility (System.Windows.Interactivity)WPF 4.0 InvokeCommandAction 兼容性(System.Windows.Interactivity)
【发布时间】:2011-10-13 10:43:55
【问题描述】:

在 WPF 4.0 中插入 InvokeCommandAction (Blend 4 SDK) 时出现问题。用户控件不显示,我有一些例外。 (登录底部) 在我的 xaml 代码中没有这行,没有问题(但没有事件触发器)。

我已经在一个外部灯光项目中测试了这部分代码,它运行良好!! 也许 InvokeCommandAction 与 may 应用程序中的某些内容不兼容,但是什么?

<UserControl x:Class="Project.Views.Menu.TestView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 
             xmlns:Menu="clr-namespace:Project.ViewModels.Menu" 
             mc:Ignorable="d" 
             x:Name="test"
             d:DesignHeight="300" d:DesignWidth="300">

    <UserControl.DataContext>
        <Menu:TestViewModel />
    </UserControl.DataContext>
    <Grid>
        <ListBox x:Name="listBox" Width="200" 
                    MaxHeight="128" SelectionMode="Single" Margin="0">
            <i:Interaction.Triggers>
                <i:EventTrigger EventName="SelectionChanged">
                    <i:InvokeCommandAction Command="{Binding TestCommand, Mode=OneWay}" CommandParameter="{Binding SelectedItem, ElementName=listBox}"/>
                </i:EventTrigger>
            </i:Interaction.Triggers>    
            <ListBoxItem>blabla1</ListBoxItem>
            <ListBoxItem>blabla2</ListBoxItem>
            <ListBoxItem>blabla3</ListBoxItem>
            <ListBoxItem>blabla4</ListBoxItem>
        </ListBox>
    </Grid>
</UserControl>

我已经记录了这些错误,但我不明白:

错误 2011-07-26 15:18:47 – La référence d'objet n'est pas définie à une instance d'un objet。 演示框架 à System.Windows.Markup.WpfXamlLoader.TransformNodes(XamlReader xamlReader, XamlObjectWriter xamlWriter, Boolean onlyLoadOneNode, Boolean skipJournaledProperties, Boolean shouldPassLineNumberInfo, IXamlLineInfo xamlLineInfo, IXamlLineInfoConsumer xamlLineInfoConsumer, XamlContextStack`1 堆栈, IStyleConnector styleConnector) à System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri) à System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri) à System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream) à System.Windows.Application.LoadComponent(对象组件,Uri resourceLocator) à Project.Views.Menu.TestView.InitializeComponent() dans C:\Project\Views\Menu\TestView.xaml:ligne 1 à Project.Views.Menu.TestView..ctor() dans C:\Project\Views\Menu\TestView.xaml.cs:ligne 24 à Project.ViewModels.MainWindowsViewModel..ctor() dans C:\Project\ViewModels\MainWindowsViewModel.cs:ligne 52 错误 2011-07-26 15:18:47 – Une 例外 a été levée par la cible d'un appel。 mscorlib à System.RuntimeTypeHandle.CreateInstance(RuntimeType 类型, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) à System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) à System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) à System.Activator.CreateInstance(类型类型,布尔非公共) à System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfoculture, Object[] activationAttributes) à System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfoculture, Object[] activationAttributes) à System.Xaml.Schema.XamlTypeInvoker.CreateInstance(Object[] arguments) à MS.Internal.Xaml.Runtime.ClrObjectRuntime.CreateInstanceWithCtor(XamlType xamlType, Object[] args) à MS.Internal.Xaml.Runtime.ClrObjectRuntime.CreateInstance(XamlType xamlType, Object[] args) à System.Xaml.XamlObjectWriter.Logic_CreateAndAssignToParentStart(ObjectWriterContext ctx) à System.Xaml.XamlObjectWriter.WriteEndObject() à System.Xaml.XamlWriter.WriteNode(XamlReader 阅读器) à System.Windows.Markup.WpfXamlLoader.TransformNodes(XamlReader xamlReader, XamlObjectWriter xamlWriter, Boolean onlyLoadOneNode, Boolean skipJournaledProperties, Boolean shouldPassLineNumberInfo, IXamlLineInfo xamlLineInfo, IXamlLineInfoConsumer xamlLineInfoConsumer, XamlContextStack`1 堆栈, IStyleConnector styleConnector) à System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri) à System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri) à System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream) à System.Windows.Application.LoadComponent(对象组件,Uri resourceLocator) à Project.MainWindow.InitializeComponent() dans C:\Project\MainWindow.xaml:ligne 1 à Project.MainWindow..ctor() dans C:\Project\MainWindow.xaml.cs:ligne 17 错误 2011-07-26 15:18:47 – Une 例外 a été levée par la cible d'un appel。 mscorlib à System.RuntimeTypeHandle.CreateInstance(RuntimeType 类型, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) à System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) à System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) à System.Activator.CreateInstance(类型类型,布尔非公共) à System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfoculture, Object[] activationAttributes) à System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfoculture, Object[] activationAttributes) à System.Xaml.Schema.XamlTypeInvoker.CreateInstance(Object[] arguments) à MS.Internal.Xaml.Runtime.ClrObjectRuntime.CreateInstanceWithCtor(XamlType xamlType, Object[] args) à MS.Internal.Xaml.Runtime.ClrObjectRuntime.CreateInstance(XamlType xamlType, Object[] args) à System.Xaml.XamlObjectWriter.Logic_CreateAndAssignToParentStart(ObjectWriterContext ctx) à System.Xaml.XamlObjectWriter.WriteStartMember(XamlMember 属性) à System.Xaml.XamlWriter.WriteNode(XamlReader 阅读器) à System.Windows.Markup.WpfXamlLoader.TransformNodes(XamlReader xamlReader, XamlObjectWriter xamlWriter, Boolean onlyLoadOneNode, Boolean skipJournaledProperties, Boolean shouldPassLineNumberInfo, IXamlLineInfo xamlLineInfo, IXamlLineInfoConsumer xamlLineInfoConsumer, XamlContextStack`1 堆栈, IStyleConnector styleConnector) à System.Windows.Markup.WpfXamlLoader.Load(XamlReader xamlReader, IXamlObjectWriterFactory writerFactory, Boolean skipJournaledProperties, Object rootObject, XamlObjectWriterSettings settings, Uri baseUri) à System.Windows.Markup.WpfXamlLoader.LoadBaml(XamlReader xamlReader, Boolean skipJournaledProperties, Object rootObject, XamlAccessLevel accessLevel, Uri baseUri) à System.Windows.Markup.XamlReader.LoadBaml(Stream stream, ParserContext parserContext, Object parent, Boolean closeStream) à System.Windows.Application.LoadBamlStreamWithSyncInfo(Stream stream, ParserContext pc) à System.Windows.Application.LoadComponent(Uri resourceLocator, Boolean bSkipJournaledProperties) à System.Windows.Application.DoStartup() à System.Windows.Application.b__1(对象未使用) à System.Windows.Threading.ExceptionWrapper.InternalRealCall(委托回调,对象参数,Int32 numArgs) à MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)

【问题讨论】:

    标签: wpf c#-4.0 expression-blend


    【解决方案1】:

    您的 InteractionTrigger 应该看起来更像这样:

            <i:Interaction.Triggers>
                <i:EventTrigger EventName="SelectionChanged">
                    <i:InvokeCommandAction Command="{Binding DataContext.TestCommand, ElementName=test}" CommandParameter="{Binding SelectedItem, ElementName=listBox}"/>
                </i:EventTrigger>
            </i:Interaction.Triggers> 
    

    希望我不会太晚 =)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多