2012-07-13 32 views
0

好吧,我有一个看起来一个的XElement像:更改的DataTemplate基于属性的一个的XElement

<authentication mode="Forms"> 
    <forms loginUrl="login.aspx" name=".LOGIN" protection="All" timeout="4800" path="/" /> 
</authentication> 

然后在我的XAML我设置一个ContentControl中,看起来像:

<ContentControl Content="{Binding Data}"> 
     <ContentControl.ContentTemplate> 
      <DataTemplate> 
       <DataTemplate.Triggers> 
        <DataTrigger Binding="{Binding Path=Attribute[mode].Value}" Value="Forms"> 
         <Setter Property="ContentTemplate" Value="{StaticResource FormsTemplate}"/>        
        </DataTrigger> 
       </DataTemplate.Triggers> 
      </DataTemplate> 
     </ContentControl.ContentTemplate> 
    </ContentControl> 

其中Data是我的包含XElement的公共属性。我的模板如下所示:

<DataTemplate x:Key="FormsTemplate"> 
     <StackPanel> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="Login URL"/> 
       <TextBox Text="{Binding Path=Element[forms].Attribute[loginUrl].Value}"/> 
      </StackPanel> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="Name"/> 
       <TextBox Text="{Binding Path=Attribute[name].Value}"/> 
      </StackPanel> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="Protection"/> 
       <TextBox Text="{Binding Path=Attribute[protection].Value}"/> 
      </StackPanel> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="Timeout"/> 
       <TextBox Text="{Binding Path=Attribute[timeout].Value}"/> 
      </StackPanel> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="Path"/> 
       <TextBox Text="{Binding Path=Attribute[path].Value}"/> 
      </StackPanel> 
     </StackPanel> 
    </DataTemplate> 
    <DataTemplate DataType="passport"> 
     <StackPanel> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="Redirect URL"/> 
       <TextBox Text="{Binding Path=Attribute[redirectUrl].Value}"/> 
      </StackPanel>     
     </StackPanel> 
    </DataTemplate> 

为什么不能正常工作?当我这样做时,没有任何东西显示在屏幕上。

回答

0

我用Style Trigger来解决它。以下是我必须使用这个工作。

<ContentControl.Style> 
      <Style TargetType="{x:Type ContentControl}"> 
       <Style.Triggers> 
        <DataTrigger Binding="{Binding Path=Data.Attribute[mode].Value}" Value="Forms"> 
         <Setter Property="ContentTemplate" Value="{StaticResource FormsTemplate}"/> 
        </DataTrigger> 
        <DataTrigger Binding="{Binding Path=Data.Attribute[mode].Value}" Value="Passport"> 
         <Setter Property="ContentTemplate" Value="{StaticResource PassportTemplate}"/> 
        </DataTrigger> 
       </Style.Triggers> 
      </Style> 
     </ContentControl.Style> 
相关问题