[英]WPF ListView binding to the collection
我使用WPF實現了一組Hyperlink元素:
var controlLinks = new List<Hyperlink>();
if (issueLinks != null)
{
foreach (var link in issueLinks)
{
var tempLink = new Hyperlink()
{
NavigateUri = new Uri(link.link)
};
controlLinks.Add(tempLink);
}
}
ListIssueLinks.ItemsSource = controlLinks;
收集已成功填寫,現在我將ListIssueLinks視圖鏈接到此集合。
<ListView Name="ListIssueLinks" Height="100" >
<ListView.View>
<GridView>
<GridViewColumn/>
</GridView>
</ListView.View>
</ListView>
在這里我遇到了一個問題,問題是我是WPF的新手,並且不知道如何正確實現格式化(例如,僅在UI上呈現NavigateUri或Name)並實現點擊任何元素的通用處理程序。 像這樣的東西:
private void Hyperlink_OnClick(object sender, RoutedEventArgs e)
{
var clickedLink = (Hyperlink) sender;
System.Diagnostics.Process.Start(clickedLink.NavigateUri.ToString());
}
我嘗試了DataTemplate,嘗試了很多其他的變種,google了很多,但仍然不知道如何做到這一點。 您能否提出任何簡單而優雅的解決方案?
DataTemplate
是您最好的選擇,以下是您如何在您的情況下實現它。
<ListView Name="ListIssueLinks" Height="100">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock>
<Hyperlink NavigateUri="{Binding}" RequestNavigate="Link_RequestNavigate">
<TextBlock Text="{Binding}" />
</Hyperlink>
</TextBlock>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
然后在您的代碼中,我將直接綁定到您的issueLinks
(無需在代碼中構建HyperLink
)。
List<string> issueLinks = new List<string>()
{
"http://www.google.com",
"http://www.stackoverflow.com",
};
ListIssueLinks.ItemsSource = issueLinks;
然后,您的RequestNavigate
事件處理程序需要啟動您的進程
private void Link_RequestNavigate(object sender, RequestNavigateEventArgs e)
{
System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo(e.Uri.AbsoluteUri));
e.Handled = true;
}
我沒有完全明白你的問題是什么,但我有兩件你應該知道存在的事情。
ObservableCollection我認為您應該考慮使用它而不是簡單的List,因為如果您需要使用ListView將List綁定到View,它具有優勢。 有關更多信息,請閱讀: ObservableCollection類
XAML方面,我認為您嘗試解釋的第二件事是如何獲取屬性並在列表視圖中顯示它們。 這意味着您需要在XAML端編寫並進一步探索它,如果列表中的數據將因任何原因發生更改,您可以在之后使用inotifypropertychanged綁定屬性。
希望我幫忙。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.