2009-05-16 64 views
1

我有一個Window去除不需要的部分)以下內容:WPF:是否有可能將下面的代碼從Procedural(C#)轉換爲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#(代碼背後):

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混合物nd C#的東西,純粹是純粹的xaml,利用WPF的DataBinding模型。

我認爲它需要類似事件觸發器和數據綁定與itemscontrol元素的選定項目或類似的東西的組合,但我不知道如何去做。

任何人都可以指導我如何轉換上述解決方案,以刪除程序代碼?

回答

1

如果您使用的是.NET 3.5SP1,那麼您可以使用新的StringFormat綁定標記擴展來執行此操作。有關使用StringFormat進行綁定的示例,請參閱here

如果.NET 3.5SP1不是一個選項,那麼您可能必須創建自己的ValueConverter。將SourceUrl屬性的值綁定到所選藝術家的ID,然後在您的轉換器中返回您在上面的C#示例中使用的相同字符串。

0
<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}' }" /> 
+0

它不工作:System.Windows.Data錯誤:4:找不到與參考'ElementName = artist_list'綁定的源。 BindingExpression:路徑= SelectedItem.ID;的DataItem = NULL;目標元素是'RSSViewer'(Name ='rssControl');目標屬性是'SourceUrl'(類型'String') – 2009-05-17 03:23:54

+0

我不認爲ItemsControl有一個SelectedItems屬性。如果你想選擇,你需要使用ListBox或ListView。 – Andy 2009-05-17 03:38:51

+0

Andy的權利,ItemsControl沒有SelectedItem屬性...所以我們必須以另一種方式做 – 2009-05-17 03:46:11

相關問題