【发布时间】:2020-03-09 14:57:15
【问题描述】:
我有一个绑定到集合的 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.
}
【问题讨论】: