WPF: возможно ли преобразовать следующий код из процедурного (C #) в декларативный (XAML)? - PullRequest
1 голос
/ 16 мая 2009

У меня есть следующее содержимое в 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, чтобы воспользоваться преимуществами модели привязки данных WPF.

Я думаю, что для этого требуется что-то вроде триггера события и комбинации привязки данных с выбранным элементом элемента itemscontrol или что-то в этом роде, но я не уверен, как это сделать.

Кто-нибудь может подсказать мне, как я могу преобразовать вышеуказанное решение, чтобы удалить процедурный код?

Ответы [ 2 ]

1 голос
/ 16 мая 2009

Если вы используете .NET 3.5SP1, вы, вероятно, можете использовать новое расширение разметки привязки StringFormat, чтобы сделать это. См. здесь для примеров связывания с StringFormat.

Если .NET 3.5SP1 не вариант, вам, вероятно, придется создать свой собственный ValueConverter. Свяжите значение свойства SourceUrl с идентификатором выбранного исполнителя, а затем в конвертере верните ту же строку, которую вы использовали в примере C # выше.

0 голосов
/ 16 мая 2009
<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}' }" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...