当事件被点击时,listview selecteditem作为T命令参数提供了类型转换异常

我有一个绑定到集合的ListView,即我的情况是LOGIN_REDIRECT_URL = 'app' 。问题是,当我尝试将SelectedItem绑定到commandparameter时,有时会给出类型转换异常,表明无法从Windows.UI.TappedEventArgs到InnerGridItems进行类型转换。 (WPF和UWP的概念相同,有一个Click事件,因此我添加了WPF标签)。请帮忙。

Xaml:

List<InnerGridItems>

这是我的模特班

InnerGridItems.cs

<ListView Margin="0,10,0" x:Name="lstInnerItems" Grid.Row="1" 
          ItemsSource="{Binding InnerBarCodeItems,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
          Selectionmode="Single"
          HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch"
          Tag="{Binding ElementName=Imgflash}">
     <Interactivity:Interaction.Behaviors>
         <Core:EventTriggerBehavior EventName="Tapped">
             <Core:InvokeCommandaction 
                   Command="{Binding ListSelectionChangedCommand,Mode=OneWay}" 
                   commandparameter="{Binding ElementName=lstInnerItems,Path=SelectedItem}"></Core:InvokeCommandaction>
         </Core:EventTriggerBehavior>
     </Interactivity:Interaction.Behaviors>
     <ListView.ItemTemplate>
         <DataTemplate>
              <StackPanel Orientation="Horizontal">
                  <RadioButton x:Name="rbnEnumerated" GroupName="A" 
                               IsChecked="{Binding IsChecked,UpdateSourceTrigger=PropertyChanged}">
                      <Interactivity:Interaction.Behaviors>
                          <Core:DataTriggerBehavior Binding="{Binding IsVisible,Mode=TwoWay}" Value="False">
                              <Core:ChangePropertyaction TargetObject="{Binding ElementName=rbnEnumerated}" PropertyName="Visibility" Value="Collapsed" />
                          </Core:DataTriggerBehavior>
                          <Core:DataTriggerBehavior Binding="{Binding IsVisible,Mode=TwoWay}" Value="True">
                              <Core:ChangePropertyaction TargetObject="{Binding ElementName=rbnEnumerated}" PropertyName="Visibility" Value="Visible" />
                          </Core:DataTriggerBehavior>
                      </Interactivity:Interaction.Behaviors>
                  </RadioButton>
                  <TextBlock Text="{Binding SerialNumber}" Margin="10,0"></TextBlock>
                  <TextBlock Margin="14,0">
                      <Run Text="("></Run>
                      <Run Text="{Binding SerialPort}"></Run>
                      <Run Text=")"></Run>
                  </TextBlock>
              </StackPanel>
          </DataTemplate>
      </ListView.ItemTemplate>
  </ListView>

这是我的ICommand

public class InnerGridItems : BindableBaseThreadSafe
    {
        private string _serialNumber = "N/A";
        public string SerialNumber
        {
            get => _serialNumber;
            set => Set(ref _serialNumber,value);
        }
        private string _serialPort = "N/A";
        public string SerialPort
        {
            get => _serialPort;
            set => Set(ref _serialPort,value);
        }
        private bool _isChecked;
        public bool IsChecked
        {
            get => _isChecked;
            set => Set(ref _isChecked,value);
        }
        private MemoryStream _flashedBarCodeImage;
        public MemoryStream flashedBarCodeImage
        {
            get => _flashedBarCodeImage;
            set => Set(ref _flashedBarCodeImage,value);
        }
        private bool _isVisisble = true;
        public bool IsVisible
        {
            get => _isVisisble;
            set => Set(ref _isVisisble,value);
        }

    }
xiaoxing2062 回答:当事件被点击时,listview selecteditem作为T命令参数提供了类型转换异常

如果这是一个间歇性问题,则可以在使用isas运算符/关键字执行强制转换之前,尝试检查强制转换,或者捕获异常。 as更好,因为它执行的转换次数更少(Is versus as discussion

使用as

var items = eventArgs as InnerGridItems;
if(items != null)
{
    //do stuff with items!
}
else
{
     //do nothing,or whatever you want to handle this condition
}

使用is

if( eventArgs is InnerGridItems)
{ 
    var items = eventArgs as InnerGridItems;
    //do stuff with items!
}
else // this could allow you to do multiple is checks.
{
     //do nothing,or whatever you want to handle this condition
}

然后您将更改FlashImageForSelectedRow方法以接受objectEventArgs实例,然后在该方法内部执行as / is检查

这并没有回答为什么会发生这种更深层次的问题,似乎单击事件有时无法抓住您的InnerGridItems实例。 除非深入了解问题对您而言真的很重要(这非常酷,请分享您发现的一切!),否则我认为添加简单的检查可能就足够了,并且可以将您的时间花在其他事情上! / p>

本文链接:https://www.f2er.com/3107631.html

大家都在问