2009-02-27 55 views
1

工作,我有以下XAML:的DataTemplate數據觸發只能從第二次

<Grid x:Name="root"> 
    <Grid.RowDefinitions> 
    <RowDefinition Height="*"/> 
    <RowDefinition Height="Auto"/> 
</Grid.RowDefinitions> 
<Grid.Resources> 
    <DataTemplate DataType="{x:Type ViewModels:TemplateViewModel}"> 
    <ContentControl Content="{Binding}" Grid.Row="0" x:Name="ct"> 
     <ContentControl.ContentTemplate> 
     <DataTemplate> 
      <TextBlock Text="Loaded" /> 
     </DataTemplate> 
     </ContentControl.ContentTemplate> 
    </ContentControl> 
    <DataTemplate.Triggers> 
     <DataTrigger Binding="{Binding DataContext.State, 
      RelativeSource={RelativeSource AncestorType={x:Type Window}}}" Value="2"> 
     <Setter Property="ContentTemplate" TargetName="ct"> 
      <Setter.Value> 
      <DataTemplate> 
       <TextBlock Text="Loading, please wait" Foreground="Red"/> 
      </DataTemplate> 
      </Setter.Value> 
     </Setter> 
     </DataTrigger> 
    </DataTemplate.Triggers> 
    </DataTemplate> 
</Grid.Resources> 
<ContentControl Content="{Binding MainContent}" /> 

這XAML是一個窗口元素中。我在窗口綁定到一個ViewModel對象具有兩個屬性,狀態和搜索Maincontent:

public class ViewModel : INotifyPropertyChanged { 
    public int State {...} // this can be only 1 or 2, for simplicity 
    public TemplateViewModel MainContent { ... } 
} 

我相應地從屬性setter提高PropertyChanged事件。

現在,用一個按鈕從磁盤加載文件,解析它並創建一個對象來分配給MainContent屬性。在解析之前,我將State屬性設置爲2(加載),分配後我將屬性重置爲1(加載)。

我第一次解析文件時,數據模板中的觸發器不起作用(注意觸發器綁定到父窗口的Data Context的State屬性,即ViewModel對象)。但第二次,它呢!

有人可以指出錯誤在哪裏嗎?

我怕我不能在這裏發佈的代碼,但如果你有一個答案,並給我一個電子郵件可以分享它..

+0

解決它使用樣式和觸發器,但仍然想知道有什麼區別 – 2009-02-27 17:16:08

回答

2

DataTemplate應用於輸入TemplateViewModel,而不是ViewModel。艾爾戈,它將不會適用於任何東西,直到MainContent屬性設置。