簡體   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