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