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