绑定到 class 中的列表

Binding to a list in a class

对于我正在使用蓝牙设备开发的应用程序。 这些设备中的每一个都有一个名称和几个服务。我正在尝试以编程方式向他们展示他们的服务。

为此,我创建了一个包含服务列表的 class。但是,当尝试绑定时,服务列表似乎完全是空的。

XAML:

public class BluetoothDevices
{
    public string Name{ get; set;}
    //public List<Guid> Services { get; set; }
    public List<string> Services { get; set; }
}

XAML:

        <ListView.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Path=Name}" Width="150" />
                    <ListView ItemsSource="{Binding}">
                        <ListView.ItemTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding Services}"/>
                            </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>
                </StackPanel>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

c#:

        adapter.ScanForBroadcasts(async (IBlePeripheral peripheral) =>
        {
            //List<Guid> services = new List<Guid>();
            List<string> services = new List<string>();

            string devicename = peripheral.Advertisement.DeviceName;
            var _services = peripheral.Advertisement.Services;
            var servicedata = peripheral.Advertisement.ServiceData;
            //services = (_services.ToList());


            await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
            () =>
            {
                services.Add("i am a string ");
                BluetoothDevices.Add(new BluetoothDevices { Name = devicename, Services = services });
            });
            //BluetoothDevices = new ObservableCollection<BluetoothDevices>(BluetoothDevices.Distinct());
        }, TimeSpan.FromSeconds(30));

像这样更改绑定。我假设您希望此内部 ListView 显示所有可用服务。为此,您必须将 Services 列表绑定到 ListViewItemsSource,以便列表中的每个项目都是 ListView 中的一个元素。通过使用 Text="{Binding}",文本块直接绑定到集合的每个实例(在本例中 string 直接绑定到 Text)。所以像这样修改你的绑定:

    <ListView ItemsSource="{Binding Services}">
        <ListView.ItemTemplate>
             <DataTemplate>
                 <TextBlock Text="{Binding}"/>
             </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

希望对您有所帮助!

编辑: 添加了绑定说明