Ich habe den folgenden Inhalt in ein Window
(entfernt unnötigen Abschnitten):WPF: Kann der folgende Code von Prozedur (C#) in Deklarativ (XAML) konvertiert werden?
XAML:
<Style x:Key="itemstyle" TargetType="{x:Type ContentPresenter}">
<EventSetter Event="MouseLeftButtonDown" Handler="HandleItemClick"/>
</Style>
<ItemsControl ItemsSource="{Binding ArtistList}" Margin="10" Name="artist_list" ItemContainerStyle="{StaticResource itemstyle}" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding ID}" Foreground="White"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<Controls:RSSViewer x:Name="rssControl" />
C# (Code hinter):
private void HandleItemClick(object sender, MouseButtonEventArgs e)
{
var selectedArtist = ((ContentPresenter) sender).Content as Artist;
rssControl.SourceUrl = "http://agnt666laptop:28666/rss.aspx?artistid=" + selectedArtist.ID;
}
Jetzt was ich tun möchte, ist die obige Mischung von Xaml a konvertieren nd C# zu etwas, das rein und ausschließlich xaml ist, um das DataBinding-Modell von WPF zu nutzen.
Ich denke, dass es so etwas wie einen Ereignisauslöser und eine Kombination von Datenbindung mit dem ausgewählten Element des Elementes control Element oder etwas ähnliches erfordert, aber ich bin mir nicht sicher, wie es geht.
Kann mir jemand sagen, wie ich die obige Lösung konvertieren kann, um den prozeduralen Code zu entfernen?
Es funktioniert nicht: System.Windows.Data Fehler: 4: Die Quelle für die Bindung mit der Referenz 'ElementName = artist_list' kann nicht gefunden werden. BindingExpression: Pfad = SelectedItem.ID; Datenelement = null; Zielelement ist 'RSSViewer' (Name = 'rssControl'); target-Eigenschaft ist 'SourceUrl' (Typ 'String') –
Ich glaube nicht, dass ItemsControl eine SelectedItems-Eigenschaft hat. Wenn Sie eine Auswahl wünschen, müssen Sie eine ListBox oder ListView verwenden. – Andy
Andys Recht, ItemsControl hat keine SelectedItem-Eigenschaft ... also müssen wir es anders machen als –