如何解决命令未在当前项目上触发
我有一个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 举报,一经查实,本站将立刻删除。