我有一个绑定到集合的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.
}
如果这是一个间歇性问题,则可以在使用is
或as
运算符/关键字执行强制转换之前,尝试尝试检查强制转换,或者捕获异常。 as
更好,因为它执行的强制类型转换较少[Is versus as discussion)