je le contenu suivant dans un Window
(sections supprimées inutiles):WPF: Est-il possible de convertir le code suivant de Procedural (C#) en Declarative (XAML)?
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 derrière):
private void HandleItemClick(object sender, MouseButtonEventArgs e)
{
var selectedArtist = ((ContentPresenter) sender).Content as Artist;
rssControl.SourceUrl = "http://agnt666laptop:28666/rss.aspx?artistid=" + selectedArtist.ID;
}
maintenant ce que je veux faire est de convertir le mélange ci-dessus de xaml sd C# à quelque chose qui est purement et simplement xaml, pour tirer parti du modèle DataBinding de WPF. Je pense que cela nécessite quelque chose comme un déclencheur d'événement et une combinaison de liaison de données avec l'élément sélectionné de l'élément itemscontrol ou quelque chose comme ça, mais je ne suis pas sûr de la façon de procéder.
Quelqu'un peut-il me guider à la façon dont je peux convertir la solution ci-dessus pour supprimer le code de procédure?
Cela ne fonctionne pas: System.Windows.Data Erreur: 4: Impossible de trouver la source pour la liaison avec la référence 'ElementName = artist_list'. BindingExpression: Path = SelectedItem.ID; DataItem = null; l'élément cible est 'RSSViewer' (Name = 'rssControl'); La propriété target est 'SourceUrl' (type 'String') –
Je ne pense pas que ItemsControl ait une propriété SelectedItems. Si vous voulez une sélection, vous devez utiliser une ListBox ou une ListView. – Andy
Andy a raison, ItemsControl n'a pas de propriété SelectedItem ... donc nous devons le faire d'une autre façon, alors –