2010-05-10 83 views
0

我有一個簡單的窗口,即各種視圖的容器。我有一個DataTemplate,根據窗口的MainViewModel屬性設置來顯示正確的視圖。基於UserControl的數據類型設置窗口屬性

<DataTemplate DataType="{x:Type VM:StartupViewModel}"> 
    <AdornerDecorator> 
     <V:StartupView /> 
    </AdornerDecorator> 
</DataTemplate> 

我希望做的是對某些意見,改變基本窗口上的一些特性,即WindowStyle,ResizeMode等類似的觸發器,但對數據類型而不是屬性值? 我怎麼能做到這一點?

編輯:

更多的谷歌搜索後,我覺得我想要做這樣的事情:

<Window.Style> 
     <Style> 
      <Setter Property="Window.WindowStyle" 
        Value="SingleBorderWindow" /> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding RelativeSource={RelativeSource Self} , Path=DataContext.MainViewModel}" 
          Value="{x:Type VM:StartupViewModel}"> 
        <Setter Property="Window.WindowStyle" 
          Value="None" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Window.Style> 

這朗姆酒,但沒有效果...

回答

0

我不是確定你可以直接綁定到數據類型。但是你可以根據選擇的數據類型在ViewModel中設置一些屬性。反過來,你可以綁定你的WindowStyle屬性到這個屬性。

如果您能夠以某種方式綁定到DataType,則可以使用BindingConverters並直接綁定到窗口屬性。

0

好吧,經過多次挫折之後,我想通了它爲什麼不起作用。綁定路徑返回正確的對象,但由於Value是一個x:Type,它似乎在比較一個實例對象與一個類型。所以我添加了一個簡單的轉換器,它返回一個對象的類型,並且它工作。

我曾經假設,如果我將我的值指定爲x:Type,WPF會知道我想將綁定的類型與值進行比較。很長一段時間,我認爲綁定是好的,問題在於觸發器,據我所知,應該可以工作。開始認爲視覺工作室出了問題; D