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

问题描述 投票:0回答:1

我有一个绑定到集合的ListView,即我的情况是List<InnerGridItems>。问题是当我尝试将SelectedItem绑定到CommandParameter时,有时会出现类型转换异常,即无法从Windows.UI.TappedEventArgs转换为InnerGridItems。 (WPF和UWP的概念相同,有一个Click事件,因此我添加了WPF标签)。请帮助。

Xaml:

<ListView Margin="0,10,0,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,Mode=TwoWay,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,0,0"></TextBlock>
                                                                <TextBlock Margin="14,0,0,0">
                                                                <Run Text="("></Run>
                                                                <Run Text="{Binding SerialPort}"></Run>
                                                                <Run Text=")"></Run>
                                                                </TextBlock>
                                                            </StackPanel>
                                                        </DataTemplate>
                                                    </ListView.ItemTemplate>
                                                </ListView>

这是我的模特班

InnerGridItems.cs

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);
        }

    }

这是我的ICommand

public ICommand ListSelectionChangedCommand { get; set; }
 private void FlashImageForSelectedRow(InnerGridItems obj)
        {
         //Gives an exception that it cannot type cast to InnerGridItems.
        }
c# wpf uwp command
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.