У меня есть следующий контент в Window
( удалены ненужные разделы ):
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 # ( Отложенный код ):
private void HandleItemClick(object sender, MouseButtonEventArgs e)
{
var selectedArtist = ((ContentPresenter) sender).Content as Artist;
rssControl.SourceUrl = "http://agnt666laptop:28666/rss.aspx?artistid=" + selectedArtist.ID;
}
Теперь я хочу преобразовать указанную выше смесь xaml и C # во что-то, что является исключительно xaml, чтобы воспользоваться преимуществами модели DataBinding WPF.
Я думаю, что для этого требуется что-то вроде триггера события и комбинации привязки данных с выбранным элементом элемента itemscontrol или что-то в этом роде, но я не уверен, как это сделать.
Может ли кто-нибудь подсказать мне, как преобразовать указанное выше решение для удаления процедурного кода?
2 ответа
Если вы используете .NET 3.5SP1, вы, вероятно, можете использовать для этого новое расширение разметки привязки StringFormat. См. здесь a> для примеров привязки со StringFormat.
Если .NET 3.5SP1 не подходит, вам, вероятно, придется создать свой собственный ValueConverter. Свяжите значение свойства SourceUrl
с идентификатором выбранного исполнителя, а затем в конвертере верните ту же строку, которую вы использовали в примере C # выше.
<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" SourceUrl="{Binding SelectedItem.ID, ElementName=artist_list, StringFormat= 'http://agnt666laptop:28666/rss.aspx?artistid={0}' }" />
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.