2017-05-08 60 views
-1

我知道已經存在一些問題,但我無法解決他們的問題。使用數據模板切換圖像

問題:我嘗試使用數據模板更改圖像,但僅顯示默認圖像。

代碼: 我的XAML代碼是這樣的:

<Window.Resources> 
    <DataTemplate x:Key="MultiTemplate"> 
     <Image Height="17" Width="17"> 
      <Image.Style> 
       <Style TargetType="{x:Type Image}"> 
        <Setter Property="Source" Value="{svg2Xaml:SvgImage VideoControllerTester;component/Resources/Start.svg}"/> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding MultiTrigger}" Value="start"> 
          <Setter Property="Source" Value="{svg2Xaml:SvgImage VideoControllerTester;component/Resources/Start.svg}"/> 
         </DataTrigger> 
         <DataTrigger Binding="{Binding MultiTrigger}" Value="stop"> 
          <Setter Property="Source" Value="{svg2Xaml:SvgImage VideoControllerTester;component/Resources/Stop.svg}"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Image.Style> 
     </Image> 
    </DataTemplate> 
</Window.Resources> 

<ContentControl ContentTemplate="{DynamicResource MultiTemplate}"/> 

在後面的代碼,我設置MultiTrigger = 「啓動」 或 「停止」。

問題:我可以使用內容控制顯示圖像嗎?或者我用數據模板做一些愚蠢的事情?

編輯:

public string MultiTrigger 
    { 
     get { return _multiTrigger; } 
     set 
     { 
      _multiTrigger = value; 
      RaisePropertyChanged(); 
     } 
    } 
+1

ContentControl的DataContext應設置爲具有MultiTrigger屬性的對象。 MultiTrigger屬性設置器應該觸發一個PropertyChanged事件。 – Clemens

+0

......或者,如果'MultiTrigger'是你窗口類的一個屬性,你必須使用'RelativeSource = {RelativeSource AncestorType = Window}'來綁定它。 –

+0

除此之外,您實際上並不需要具有DataTemplate的ContentControl。您還可以將圖像樣式作爲資源並直接將其應用於圖像控件。 – Clemens

回答

0

假設有一個MainViewModel類與MultiTrigger屬性(BTW是一個奇怪的屬性名。),你的視圖模型類的實例分配給主窗口的DataContext,無論是在後面的代碼:

public MainWindow() 
{ 
    InitializeComponent(); 
    DataContext = new MainViewModel(); 
} 

或者在XAML:

<Window.DataContext> 
    <local:MainViewModel/> 
</Window.DataContext> 

然後你會宣稱圖像風格作爲一種資源:

<Window.Resources> 
    <Style TargetType="Image" x:Key="ImageStyle"> 
     <Setter Property="Source" Value="{svg2Xaml:SvgImage VideoControllerTester;component/Resources/Start.svg}"/> 
     <Style.Triggers> 
      <DataTrigger Binding="{Binding MultiTrigger}" Value="stop"> 
       <Setter Property="Source" Value="{svg2Xaml:SvgImage VideoControllerTester;component/Resources/Stop.svg}"/> 
      </DataTrigger> 
     </Style.Triggers> 
    </Style> 
</Window.Resources> 

,並將其應用到圖像控制:

<Image Style="{StaticResource ImageStyle}"/> 

然後某處主窗口的代碼,通過直接訪問更改屬性值的背後查看模型實例如下:

((MainViewModel)DataContext).MultiTrigger = "stop";