Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在同一listview uwp中包含多个c#类_C#_Xaml_Listview_Uwp_Template10 - Fatal编程技术网

如何在同一listview uwp中包含多个c#类

如何在同一listview uwp中包含多个c#类,c#,xaml,listview,uwp,template10,C#,Xaml,Listview,Uwp,Template10,结构 我正在创建一个UWP应用程序和ASP Web服务来访问SQL Server数据库。UWP和WebService都具有与数据库表相对应的7个基类的相同模型 问题 最大的问题是我是一个新手开发人员,所以我缺乏洞察力才是真正的问题,但你现在还不能解决这项艰巨的任务。。可解决的问题是,如何从多个基类获取ListView中的多个值集。在我的示例中,我引用的是publicList设备{get;private set;}=new List()但我不知道如何引用列表中的多个类。。我想做的是列出设备中的一些

结构

我正在创建一个UWP应用程序和ASP Web服务来访问SQL Server数据库。UWP和WebService都具有与数据库表相对应的7个基类的相同模型

问题

最大的问题是我是一个新手开发人员,所以我缺乏洞察力才是真正的问题,但你现在还不能解决这项艰巨的任务。。可解决的问题是,如何从多个基类获取ListView中的多个值集。在我的示例中,我引用的是public
List设备{get;private set;}=new List()但我不知道如何引用列表中的多个类。。我想做的是列出设备中的一些值和位置中的其他值

代码

DisplayDevices.xaml

                    <ListView ItemsSource="{x:Bind ViewModel.Devices}"
                          SelectionChanged="{x:Bind ViewModel.deviceList_SelectionChanged}"
                           x:Name="deviceList" Margin="50,0,0,50"
                           Header="{x:Bind ViewModel.RouterName}"
                           RelativePanel.RightOf="EditViewSP">
                    <ListView.ItemTemplate>
                        <DataTemplate x:DataType="model:Device">
                            <StackPanel Orientation="Vertical" Padding="5">
                            <TextBlock Text="{x:Bind ViewModel.FacilityName }" />
                            <StackPanel Orientation="Horizontal">
                                <TextBlock Text="{x:Bind Hardware}" />
                                <TextBlock Text="{x:Bind HostName}" Margin="10,0,0,0"/>
                            </StackPanel>
                            </StackPanel>
                        </DataTemplate>
                        </ListView.ItemTemplate>
                    </ListView>
Location.cs

namespace RapidDeploy.Models
{
    public class Location
    {
        [Key]
        public int Id { get; set; }
        public string FacilityName { get; set; }
        public string Country { get; set; }
        public string Region { get; set; }
        public string State { get; set; }
        public string City { get; set; }
        public int BuildingNum { get; set; }
        public string Address { get; set; }
DisplayDeviceViewModel.cs

        private Device _ActiveDevice;
        private int _hostName;
        public int HostName { get { return _hostName; } set { Set(ref _hostName, value); } }
        var uriL = new Uri("http://localhost:2463/api/Locations/");
        var uriD = new Uri("http://localhost:2463/api/Devices/");


            var JsonResponseD = await client.GetStringAsync(uriD);
            var devicesResult = JsonConvert.DeserializeObject<List<Device>>(JsonResponseD);
            Devices = devicesResult;

            var JsonResponseL = await client.GetStringAsync(uriL);
            var locationsResult = JsonConvert.DeserializeObject<List<Location>>(JsonResponseL);
            Locations = locationsResult;
private Device\u ActiveDevice;
私有int_主机名;
public int HostName{get{return}HostName;}set{set(ref{u HostName,value);}
var uriL=新Uri(“http://localhost:2463/api/Locations/");
var uriD=新Uri(“http://localhost:2463/api/Devices/");
var JsonResponseD=await client.GetStringAsync(uriD);
var DeviceResult=JsonConvert.DeserializeObject(JsonResponseD);
设备=设备结果;
var JsonResponseL=await client.GetStringAsync(uriL);
var locationsResult=JsonConvert.DeserializeObject(JsonResponseL);
位置=位置结果;

您必须创建一个新类,并添加要在xaml中绑定的成员。这意味着您的DB查询将返回来自自定义类中多个表的对象,如下所示:

MyBindeModel.cs

public class MyBindedModel
{
    public string FacilityName { get; set; }
    public string Hardware{ get; set; }
    public string HostName{ get; set; }
    //Many more depending on what you want to show on UI
}
现在在ViewModel中,您可以使用

public ObservableCollection<MyBindedModel> MyData
公共可观测收集MyData
DisplayDevice.xaml

     <ListView ItemsSource="{x:Bind ViewModel.MyData}"
                      SelectionChanged="{x:Bind ViewModel.deviceList_SelectionChanged}"
                       x:Name="deviceList" Margin="50,0,0,50"
                       Header="{x:Bind ViewModel.RouterName}"
                       RelativePanel.RightOf="EditViewSP">
                <ListView.ItemTemplate>
                    <DataTemplate x:DataType="MyData">
                        <StackPanel Orientation="Vertical" Padding="5">
                        <TextBlock Text="{x:Bind FacilityName }" />
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="{x:Bind Hardware}" />
                            <TextBlock Text="{x:Bind HostName}" Margin="10,0,0,0"/>
                        </StackPanel>
                        </StackPanel>
                    </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>


在类别中添加一个通用接口并创建一个列表。也许IListable是一个说明用途的名称。ToString显然很有用。或者您可以创建
DeviceOrLocationViewModel
并使用它。我认为直接绑定到视图中的模型不是一个好主意。我愿意接受建议。。从一开始,我就想学习应用MVVM方法的最干净、最有效的方法。因此,如果有办法将数据类型重定向到ViewModel please share.TaW,您是否有代码示例或链接来解释您的建议?位置和设备之间的链接在哪里?这将有助于在类中添加我创建的每个列表中需要的所有内容。下一个需要思考的问题是,如何接受WebService JSON调用并将其拆分?我正在将代码添加到原始帖子中以供参考。因为即使我在应用程序中将它们混合在一起使用,它们仍然需要被提取,并作为单独的表发布到SQL。@ekgcorp您可以始终使用Linq投影从更大的集合中获取所需的字段。
     <ListView ItemsSource="{x:Bind ViewModel.MyData}"
                      SelectionChanged="{x:Bind ViewModel.deviceList_SelectionChanged}"
                       x:Name="deviceList" Margin="50,0,0,50"
                       Header="{x:Bind ViewModel.RouterName}"
                       RelativePanel.RightOf="EditViewSP">
                <ListView.ItemTemplate>
                    <DataTemplate x:DataType="MyData">
                        <StackPanel Orientation="Vertical" Padding="5">
                        <TextBlock Text="{x:Bind FacilityName }" />
                        <StackPanel Orientation="Horizontal">
                            <TextBlock Text="{x:Bind Hardware}" />
                            <TextBlock Text="{x:Bind HostName}" Margin="10,0,0,0"/>
                        </StackPanel>
                        </StackPanel>
                    </DataTemplate>
                    </ListView.ItemTemplate>
                </ListView>