[英]Windows phone xaml data binding
我有一个类Device,它有一个4个插槽的数组。 每个套接字都有id。
class Device
{
public String name { get; set; }
public Socket[] sArray = new Socket[4];
}
class socket
{
public string id{ get; set; }
}
我想将所有4个id打印到listview的一个项目中。 每个项目有5个文本块。 我可以使用打印设备名称,但如何从设备中的套接字数组打印套接字ID?
<TextBlock Name="txtSocket1" Text="how to bind here socket id?"/>
<TextBlock Name="txtSocket2" Text="how to bind here socket id?"/>
<TextBlock Name="txtSocket3" Text="how to bind here socket id?"/>
<TextBlock Name="txtSocket4" Text="how to bind here socket id?"/>
<TextBlock FontSize="28" Text="{Binding Path=name}"/> //here easily I can get device name
如果您要显示一组项目,则不应使用不同的文本框。 您想要使用旨在显示集合的控件,例如ItemsControl :
<ItemsControl>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
当使用这种方法和WPF / SilverLight时,我建议使用MVVM pattern
。 在这里,您提供了一个ViewModel
其中包含要在View中显示的数据:
public class SocketViewModel
{
public string Name { get; set; }
public List<Socket> Sockets { get; set; }
public SocketViewModel()
{
Sockets = new List<Socket>();
}
}
你填写这样的数据:
var viewModel = new SocketViewModel
{
Name = "Some name";
//This is some dummy just for demo purposes
Sockets = YourDataBase.GetSockets();
}
现在将viewmodel分配给页面的DataContext
,如下所示:
DataContext = viewModel;
在XAML中,您可以获取所有数据并在屏幕上显示。 正确的XAML现在应该是这样的:
<ItemsControl ItemsSource="{Binding=Sockets}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Path=Id}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<TextBlock FontSize="28" Text="{Binding Path=Name}"/>
请注意,您应该绑定到属性而不是字段。 创建一个属性Public IEnumerable SocketsToBindTo {get {return _socketArray;}}
然后在每个文本框中,您可以绑定到属性,创建转换器并将数组位置号作为转换器传递。 在转换器中,您可以在转换器中使用linq来执行类似SocketsToBindTo.Skip(commandParameter).First()的操作并返回名称。
虽然我告诉你了解你想要的东西的步骤。 我不认为你在做什么是正确的方法。 如果您使用的是listview,我认为您只需绑定到itemsource,然后您就必须处理在Items模板上设置绑定等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.