2011-08-29 21 views
0

我想禁用WPF設計器中的DataContext實例(在VS中不混合)的創建。 什麼我目前所做的就是下面的代碼:爲VS Disigner禁用DataContext

<Window .... 
d:DataContext="{d:DesignInstance local:Class1, IsDesignTimeCreatable=True}"> 
    <Window.DataContext> 
     <local:Class2 d:IsDesignTimeCreatable="False/> 
    </Window.DataContext> 
</Window> 

雖然從Class1的數據是在設計時使用,仍在創建Class2中的一個實例。

我知道我可以使用一些代碼來檢查我是否在設計時,但我只想通過XAML來解決這個問題!

有什麼建議嗎?

+0

你有一個錯字:) d:DataContext的= 「{d:DesignInstance地方:1類,IsDesignTimeCreatable =真}」 和d :IsDesignTimeCreatable =「False」/> –

回答

1

你可以看看附屬物DesignerProperties.IsInDesignMode。這裏有一些建議,但它們都不是很乾淨,最後,我認爲在代碼中使用幾行代碼是最簡單的解決方案。

  • 我不認爲如果在Style我們設置的DataContext對象被實例化(但可能在VS設計的未來升級更改)
  • 你可以綁定DataContextIsInDesignMode與返回一個轉換器Class2的實例或null取決於值IsInDesignMode
  • 使用DataTrigger。只有XAML中,但辦法不多代碼..

<Window ... 
     xmlns:pf="clr-namespace:System.ComponentModel;assembly=PresentationFramework"> 
    <Window.Style> 
     <Style TargetType="Window"> 
      <Style.Triggers> 
       <DataTrigger 
        Binding="{Binding RelativeSource={RelativeSource Self}, 
             Path=(pf:DesignerProperties.IsInDesignMode)}" 
        Value="False"> 
        <Setter Property="DataContext"> 
         <Setter.Value> 
          <local:Class2 /> 
         </Setter.Value> 
        </Setter> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Window.Style> 
    <!--...--> 
</Window> 
+0

我不喜歡背後的代碼。風格+觸發器仍然是一個好主意。仍然DataTrigger不正確,它應該是觸發器。此外,您應該將Style外包到ResourceDictionary中,否則,如果您單擊xaml中的節點,設計師往往會創建datacontext的實例。 – Jaster