繁体   English   中英

Windows手机xaml数据绑定

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM