2012-10-15 44 views
3

我有一個帶有列表視圖的XAML代碼。現在我想用一個按鈕 更改CellTemplate,但沒有代碼。我怎樣才能做到這一點?使用不帶代碼的按鈕更改模板

模板:

<DataTemplate x:Key="URL" > 
    <TextBlock> 
    <Hyperlink NavigateUri="{Binding [email protected]}"> 
     <TextBlock Text="{Binding [email protected]}"/> 
    </Hyperlink> 
    </TextBlock> 
</DataTemplate> 

<DataTemplate x:Key="Text"> 
    <TextBlock Text="{Binding [email protected]}"/> 
</DataTemplate>  


<Grid> 
<Grid.Resources> 
    <XmlDataProvider x:Key="Data"> 
    <x:XData> 
     <Data xmlns=""> 
     <Item ID="1" Desc="Google" URL="http://www.google.com" Acceptable="true"/> 
     <Item ID="2" Desc="StackOverflow" URL="http://www.stackoverflow.com" Acceptable="true"/> 
     <Item ID="3" Desc="4chan" URL="http://www.4chan.org" Acceptable="false"/> 
     </Data> 
    </x:XData> 
    </XmlDataProvider> 
</Grid.Resources> 
<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="100"/> 
    <ColumnDefinition Width="300"/> 
</Grid.ColumnDefinitions> 

這裏是按鈕,其魔術應該發生,並設置從URLColumn的CellTemplate。 當我點擊這個按鈕時,我想讓Text爲CellTemplate。

<Button Grid.Column="0" 
    Name="Text" 
    Content="Text"/> 

列表視圖與GridViewColumn URLColumn。我想改變它的CellTemplate。

<ListView 
    Grid.Column="1" 
    DataContext="{Binding Source={StaticResource Data}, XPath=/Data}" 
    ItemsSource="{Binding XPath=Item}"> 
    <ListView.View> 
    <GridView> 
     <GridViewColumn Header="ID" DisplayMemberBinding="{Binding [email protected]}"/> 
     <GridViewColumn Header="Description" DisplayMemberBinding="{Binding [email protected]}"/> 
     <GridViewColumn x:Key="URLColumn" Header="URL" CellTemplate="{StaticResource URL}"/> 
     <GridViewColumn Header="Acceptable"> 
     <GridViewColumn.CellTemplate> 
      <DataTemplate> 
      <CheckBox IsChecked="{Binding [email protected]}"/> 
      </DataTemplate> 
     </GridViewColumn.CellTemplate> 
     </GridViewColumn> 
    </GridView> 
    </ListView.View> 
    </ListView> 

這是沒有可能的代碼隱藏?如果是這樣,怎麼樣? 我已經搜索整個一天的互聯網,但無法找到anwser。

感謝您的幫助!

回答

2

首先安裝Expression Blend的交互NuGet包(或Expression Blend的SDK中手動添加Microsoft.Expression.Interactions.dll參考):

Install-Package Blend.Interactivity.Wpf 

然後使用ChangePropertyAction觸發動作:

<Button 
    xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity" 
    xmlns:ic="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions" Grid.Column="0" Name="Text" Content="Text"> 
    <i:Interaction.Triggers> 
     <i:EventTrigger EventName="Click"> 
      <ic:ChangePropertyAction TargetName="URLColumn" PropertyName="CellTemplate" Value="{StaticResource Text}" /> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</Button> 
+0

這一工程!非常感謝你!!! – Thomas