UWP Listview绑定错误

时间:2018-05-27 16:24:07

标签: c# xaml uwp

在我的UWP应用主页xaml中,我尝试将ObservableCollection<BluetoothLEDevice> BleDeviceList绑定到列表视图。
如果我运行我的应用程序,我会收到以下错误:

  

System.InvalidCastException:无法转换类型为&#39; Windows.Devices.Bluetooth.BluetoothLEDevice&#39;的对象输入&#39; UWPsimpleBLE_exampleWithSomeControls.MainPage&#39;。      at UWPsimpleBLE_exampleWithSomeControls.MainPage.MainPage_obj2_Bindings.SetDataRoot(Object newDataRoot)      at UWPsimpleBLE_exampleWithSomeControls.MainPage.MainPage_obj2_Bindings.ProcessBindings(Object item,Int32 itemIndex,Int32 phase,Int32&amp; nextPhase)

 <Page.Resources>
    <DataTemplate x:Key="ListDataTemplate" x:DataType="local:MainPage">
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
            <TextBlock Text="{x:Bind Path=BleDevice.Name }" HorizontalAlignment="Center" Width="150" />
            <StackPanel Margin="20,20,0,0">
                <!--<TextBlock Text="{x:Bind BleDevice.BluetoothAddress.ToString()}" HorizontalAlignment="Left" FontSize="16" />-->
                <!--<TextBlock Text="{x:Bind BleDevice.ConnectionStatus}" HorizontalAlignment="Left" FontSize="10" />-->
            </StackPanel>
        </StackPanel>
    </DataTemplate>
</Page.Resources>



 <ListView HorizontalAlignment="Stretch" Height="100" Margin="0,0,0,0"
                  VerticalAlignment="Top" Background="#FFDED7D7" 
                  BorderBrush="#FFF88686" Foreground="Black" 
                  ItemsSource="{x:Bind BleDeviceList}"
                  ItemTemplate="{StaticResource ListDataTemplate }">
        </ListView>  

如果我注释掉TextBlock文本行..错误消失了,所以我必须对我的绑定做错了

1 个答案:

答案 0 :(得分:1)

正如评论中所讨论的,解决方案是将x:DataType从MainPage更改为BluetoothLEDevice类。此外,还必须导入BluetoothLEDevice类。对于x:Bind,您必须定义绑定到的类的类型,在这种情况下,正确的类是BluetoothLEDevice

所以这应该是完成工作的代码:

<DataTemplate x:Key="ListDataTemplate" x:DataType="local:BluetoothLEDevice">

此行使BluetoothLEDevice类在XAML页面中可见:

xmlns:local="using:Windows.Devices.Bluetooth"

This page描述x:与DataTemplates绑定(特别是&#34; DataTemplate和x:DataType&#34;部分)。