通过UWP中的x:bind将数据绑定到ListView中

Rav*_*avi 4 c# binding listview uwp xbind

我在程序中使用Hubsection,并且<HubSection>有一个ListView。但我无法将数据绑定到ListView。我曾经尝试使用,{binding}但是在输出中我变得空白,而在使用时x:bind我得到的错误是

没有为DataTemplate定义DataType。包含x:Bind的模板需要使用'x:DataType'指定数据类型

帮助我解决这个问题。这是我的代码:

.xaml

    <Hub Header="abc" FontWeight="Bold">
        <HubSection Header="header1" x:Name="hub1">
            <DataTemplate >
                <ListView x:Name="list1" ItemsSource="{x:Bind info}">
                    <ListView.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Vertical">
                                <StackPanel Orientation="Vertical">
                                    <StackPanel Orientation="Horizontal">
                                        <Image Source="{X:Bind image}"></Image>
                                        <TextBlock Text="{x:Bind name}"/>
                                    </StackPanel>
                                    <TextBlock Text="{x:Bind bio}"/>
                                </StackPanel>
                            </StackPanel>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </DataTemplate>
        </HubSection>
        <HubSection Header="header 2">
            <DataTemplate>          
            </DataTemplate>
        </HubSection>
    </Hub>
</Grid>
Run Code Online (Sandbox Code Playgroud)

.cs

namespace app1
{
public class info
{
    public String name { get; set; }
    public String bio { get; set; }
    public String image { get; set; }
}

public sealed partial class abcde : Page
{

    ObservableCollection<info> obsinfo = new ObservableCollection<info>();
    public abcde()
    {
        this.InitializeComponent();
        filldata();
    }
    void filldata()
    {
        obsinfo.Add(new info { name = "data1", image = "images/data1.png", bio = "" });
        obsinfo.Add(new info { name = "data2", image = "images/data2.png", bio = "" });

    }
}
}
Run Code Online (Sandbox Code Playgroud)

Alm*_*Vuk 6

基本上,您得到的错误是告诉您尚未定义要绑定到的数据类型。

因此,为了在DataTemplate上解决此问题,请在您的以下位置添加此属性:ListView.ItemTemplate-> DataTemplate

x:DataType =“ namespace:DATA_TYPE”

对于此示例,您的类信息与MainPage在同一命名空间中,因此对于XAML 中的命名空间,我将为命名空间设置本地,如下所示:

<DataTemplate x:DataType="local:info"
Run Code Online (Sandbox Code Playgroud)

而且您在这部分中犯了错误:

ItemsSource =“ {x:绑定信息}”

在这里,您需要设置要绑定的列表或对象而不是数据类型,而类信息显然是您的数据类型。

另一件事是,您不能仅仅告诉HubControl中的ItemsSource,您需要通过某种加载事件以编程方式对其进行设置,并且在加载事件中,您可以设置ItemSource。

因此,在您进行所有维修的情况下,您的XAML应该看起来像这样,这已经过测试,并且适用于XAML和.CS的代码:

<Hub Header="abc" FontWeight="Bold">
        <HubSection Header="header1" x:Name="hub1">
            <DataTemplate>
                <!-- Instead of ItemSource in XAML we make event in which we will set ItemSource -->
                <ListView x:Name="list1" 
                          Loaded="Data_Loaded">
                    <ListView.ItemTemplate>
                        <DataTemplate x:DataType="local:info">
                            <StackPanel Orientation="Vertical">
                                <StackPanel Orientation="Vertical">
                                    <StackPanel Orientation="Horizontal">
                                        <Image Source="{X:Bind image}"></Image>
                                        <TextBlock Text="{x:Bind name}"/>
                                    </StackPanel>
                                    <TextBlock Text="{x:Bind bio}"/>
                                </StackPanel>
                            </StackPanel>
                        </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>
            </DataTemplate>
        </HubSection>
        <HubSection Header="header 2">
            <DataTemplate>          
            </DataTemplate>
        </HubSection>
    </Hub>
</Grid>
Run Code Online (Sandbox Code Playgroud)

您的.cs子类:

namespace app1
{
public class info
{
    public String name { get; set; }
    public String bio { get; set; }
    public String image { get; set; }
}

public sealed partial class abcde : Page
{

    ObservableCollection<info> obsinfo = new ObservableCollection<info>();
    public abcde()
    {
        this.InitializeComponent();
        filldata();
    }
    void filldata()
    {
        obsinfo.Add(new info { name = "data1", image = "images/data1.png", bio = "" });
        obsinfo.Add(new info { name = "data2", image = "images/data2.png", bio = "" });

     }

     // Here we can set ItemsSource for our ListView
     private void Data_Loaded(object sender, RoutedEventArgs e) {
                var listView = (ListView)sender;
                listView.ItemsSource = obsinfo;
     }

  }
}
Run Code Online (Sandbox Code Playgroud)

进行更改并运行,更改后应该可以运行。

注意:在x:DataType属性中,请小心设置类信息所在的名称空间,以使其正常工作。

更改后,如果您在XAML中出现蓝线,请清理并重建您的项目,我强烈建议您进行代码分离。

另外,对您来说,我的提示是对这种“显示数据”使用数据透视控件,实现起来更容易,并且您会得到类似的结果。您可以在这里查看