微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

命令未在当前项目上触发

如何解决命令未在当前项目上触发

我有一个CarouselView。 ItemsSource绑定到类型ObservableCollection的{​​{1}}。 AlarmEvent是不同类型的警报事件(常规,Fr,Vfr,Anpr)的基类。 ItemTemplate根据CurrentItem的类型而变化。这行得通。

Xaml:

AlarmEvent

模板选择器:

<CarouselView x:Name="cvAlarmEvents"
              ItemsSource="{Binding AlarmEvents}"
              CurrentItem="{Binding SelectedAlarmEvent}"
              CurrentItemChangedCommand="{Binding CmdselectedAlarmEventChanged}"
              ItemTemplate="{StaticResource AlarmEventDataTemplateSelector}"
              Grid.Row="2"
              Margin="0,2,0"
              BackgroundColor="#141d3d"                      
              IsVisible="true"/>

GenericView,FrView等从ContentView继承。实际的命令绑定位于从AlarmEventDataTemplateSelector返回的DataTemplate(ContentView)内部:

public class AlarmEventDataTemplateSelector : DataTemplateSelector
{
    public DataTemplate Generic { get; set; }
    public DataTemplate Fr { get; set; }
    public DataTemplate Tfr { get; set; }
    public DataTemplate Anpr { get; set; }

    public AlarmEventDataTemplateSelector()
    {
        Generic = new DataTemplate(typeof(GenericView));
        Fr = new DataTemplate(typeof(FrView));
        Tfr = new DataTemplate(typeof(TfrView));
        Anpr = new DataTemplate(typeof(AnprView));
    }

    protected override DataTemplate OnSelectTemplate(object item,BindableObject container)
    {
        var alarmEvent = item as AlarmEvent;

        switch (alarmEvent.Type)
        {
            case Enums.AlarmEventType.None:
                return null;
            case Enums.AlarmEventType.Generic:
                return Generic;
            case Enums.AlarmEventType.FaceRecognition:
                return Fr;
            case Enums.AlarmEventType.TemperatureFaceRecognition:
                return Tfr;
            case Enums.AlarmEventType.ANPR:
                return Anpr;
            default:
                return null;
        }
    }
}

除了Command绑定外,我在模型上还有很多可以正常工作的数据绑定。我已经用OnClick事件对按钮进行了测试,它们会按预期触发,这使我认为Command数据绑定无效。

这是命令代码在AlarmEvent内部的外观

<ImageButton Source="CamWhite1"
                                         BackgroundColor="Transparent"
                                         Scale="1"
                                         BorderColor="White"
                                         BorderWidth="3"
                                         Padding="10"
                                         Margin="10,5"
                                         Command="{Binding CmdAddPic}" />

我无法在线找到有关此问题的单个线程。我发现无数线程试图将命令从所选项目绑定到其视图模型。这不是我想要的。我只是想让命令绑定在我的数据模型(AlarmEvent)上起作用,而我为为什么它不起作用而感到困惑。也许我缺少明显的东西?

解决方法

我很傻,因为没有意识到这一点,解决方法是:

而不是像这样的自动属性-

public Command CmdSubmitUserMedia{ get; set; }

我需要像这样使用完整属性-

private Command cmdSubmitUserMedia;
        [Ignore]
        public Command CmdSubmitUserMedia
        {
            get { return cmdSubmitUserMedia; }
            set { SetProperty(ref cmdSubmitUserMedia,value); }
        }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。