2016-10-10 131 views
-1

嘗試一個簡單的DataTemplate實現,由於某種原因不起作用。看起來條件內的綁定從未被評估過,即使在初始加載時也是如此。任何輸入讚賞。WPF DataTemplate.Triggers不評估

<DataTemplate x:Key="ReadinessCellTemplate"> 
     <StackPanel Orientation="Horizontal"> 
      <Grid> 
       <Grid.Style> 
        <Style TargetType="Grid"> 
         <Setter Property="Visibility" Value="Collapsed" /> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding Readiness}" Value="{x:Static db:ReadinessState.DEVELOPMENT}"> 
           <Setter Property="Visibility" Value="Visible" /> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
       </Grid.Style> 
       <Ellipse Width="14" Height="14" HorizontalAlignment="Center" VerticalAlignment="Center" Fill="#FF1B468A" /> 
       <TextBlock TextAlignment="Center" Text="D" Foreground="White" /> 
      </Grid> 

      <Path x:Name="PART_ShapePath" Height="14" Width="14" Fill="#FF1B468A"> 
       <Path.ToolTip> 
        <ToolTip x:Name="PART_StatusToolTip" /> 
       </Path.ToolTip> 
      </Path> 
     </StackPanel> 

     <DataTemplate.Triggers> 
      <MultiDataTrigger> 
       <MultiDataTrigger.Conditions> 
        <Condition Binding="{Binding LastModifiedTimestamp, Converter={StaticResource IsNullConverter}, diag:PresentationTraceSources.TraceLevel=High}" Value="True" /> 
        <Condition Binding="{Binding LastFailedBuildTimestamp, Converter={StaticResource IsNullConverter}}" Value="True" /> 
       </MultiDataTrigger.Conditions> 
       <Setter TargetName="PART_ShapePath" Property="Visibility" Value="Collapsed" /> 
      </MultiDataTrigger> 

      <DataTrigger Binding="{Binding LastFailedBuildTimestamp, Converter={StaticResource IsNullConverter}}" Value="False"> 

       <Setter TargetName="PART_ShapePath" Property="Visibility" Value="Visible" /> 
       <Setter TargetName="PART_ShapePath" Property="Data" Value="M9.0 0.0L0.0 16.0L18.0 16.0L9.00004001084 0.0ZM9.90797917744 14.0L8.0 14.0L8.0 12.0L10.0 12.0L10.0 14.053956628ZM9.43709923716 11.0L8.48917922657 11.0L8.0 6.87502426276L8.0 4.0L10.0 4.0L10.0 6.87502426276L9.43709923716 11.3799755923Z" /> 

       <Setter TargetName="PART_StatusToolTip" Property="Content"> 
        <Setter.Value> 
         <StackPanel> 
          <StackPanel Orientation="Vertical"> 
           <TextBlock Text="{Binding LastFailedBuildTimestamp, TargetNullValue=UNSPECIFIED, StringFormat={}When: {0}}" /> 
           <TextBlock Text="{Binding LastBuildError, TargetNullValue=UNSPECIFIED, StringFormat={}Why: {0}}" /> 
          </StackPanel> 
         </StackPanel> 
        </Setter.Value> 
       </Setter> 
      </DataTrigger> 

      <MultiDataTrigger> 
       <MultiDataTrigger.Conditions> 
        <Condition Binding="{Binding LastModifiedTimestamp, Converter={StaticResource IsNullConverter}}" Value="False" /> 
        <Condition Binding="{Binding LastFailedBuildTimestamp, Converter={StaticResource IsNullConverter}}" Value="True" /> 
       </MultiDataTrigger.Conditions> 
       <Setter TargetName="PART_ShapePath" Property="Visibility" Value="Visible" /> 
       <Setter TargetName="PART_ShapePath" Property="Data" Value="M 0,11 0,14 3.0056497,14 11.706214,5.220339 8.7005652,2.2146893 0,11 0,11 Z M 14,2.9265537 C 14.316384,2.6101695 14.316384,2.1355932 14,1.819209 L 12.180791,0 C 11.864407,-0.31638417 11.38983,-0.31638417 11.073446,0 L 9.6497174,1.4237288 12.655366,4.4293786 14,3 14,3 Z" /> 
       <Setter TargetName="PART_StatusToolTip" Property="Content"> 
        <Setter.Value> 
         <StackPanel> 
          <StackPanel Orientation="Vertical"> 
           <TextBlock Text="{Binding LastModifiedTimestamp, TargetNullValue=UNSPECIFIED, StringFormat={}When: {0}}" /> 
           <TextBlock Text="{Binding LastModifiedBy, TargetNullValue=UNKNOWN, StringFormat={}Modified by: {0}}" /> 
          </StackPanel> 
         </StackPanel> 
        </Setter.Value> 
       </Setter> 
      </MultiDataTrigger> 
     </DataTemplate.Triggers> 
    </DataTemplate> 

編輯:在DataContext設置爲具有以下屬性定義對象:

public ReadinessState Readiness 
{ 
    get { return _payload.Readiness; } 
    set 
    { 

     bool t = _payload.Readiness != value; 
     if (t) 
     { 
      _payload.Readiness = value; 
      OnPropertyChanged("Readiness"); 
     } 
    } 
} 
public DateTimeOffset? LastModifiedTimestamp 
{ 
    get 
    { 
     return _payload?.LastModifiedTimestamp; 
    } 
    set 
    { 

     if (_payload != null && _payload.LastModifiedTimestamp != value) 
     { 
      LastModifiedBy = LockingSession?.Username; 
      _payload.LastModifiedTimestamp = value; 
      PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("LastModifiedTimestamp")); 
     } 
    } 
} 
public DateTimeOffset? LastFailedBuildTimestamp 
{ 
    get 
    { 
     return _payload?.LastFailedBuildTimestamp; 
    } 
    set 
    { 

     if (_payload != null && _payload.LastFailedBuildTimestamp != value) 
     { 
      _payload.LastFailedBuildTimestamp = value; 
      PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("LastFailedBuildTimestamp")); 
     } 
    } 
} 

public string LastModifiedBy 
{ 
    get 
    { 
     return _payload?.LastModifiedBy; 
    } 
    private set 
    { 

     if (_payload != null && _payload.LastModifiedBy != value) 
     { 
      _payload.LastModifiedBy = value; 
      PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("LastModifiedBy")); 
     } 
    } 
} 


public string LastBuildError 
{ 
    get 
    { 
     return _payload?.LastBuildError; 
    } 
    set 
    { 

     if (_payload != null && _payload.LastBuildError != value) 
     { 
      _payload.LastBuildError = value; 
      PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("LastBuildError")); 
     } 
    } 
} 

以準備結合工作正常,但LastModifiedTimestamp不是。 IsNullConverter永遠不會被調用。

+1

什麼你綁定到任何提示? –

+0

如果可以訪問,請在IsNull轉換器中放置一個斷點。 – AnjumSKhan

回答

0

最後我採取簡單的,並把觸發器在我試圖操縱元素的樣式:

<Path x:Name="PART_ShapePath" Height="14" Width="16" Fill="#FF1B468A"> 
      <Path.Style> 
       <Style TargetType="Path"> 
        <Style.Triggers> 
         <MultiDataTrigger> 
          <MultiDataTrigger.Conditions> 
           <Condition Binding="{Binding LastModifiedTimestamp, Converter={StaticResource IsNullConverter}}" Value="True" /> 
           <Condition Binding="{Binding LastFailedBuildTimestamp, Converter={StaticResource IsNullConverter}}" Value="True" /> 
          </MultiDataTrigger.Conditions> 
          <Setter Property="Visibility" Value="Collapsed" /> 
         </MultiDataTrigger> 
         <DataTrigger Binding="{Binding LastFailedBuildTimestamp, Converter={StaticResource IsNullConverter}}" Value="False"> 

          <Setter Property="Visibility" Value="Visible" /> 
          <Setter Property="Data" Value="M9.0 0.0L0.0 16.0L18.0 16.0L9.00004001084 0.0ZM9.90797917744 14.0L8.0 14.0L8.0 12.0L10.0 12.0L10.0 14.053956628ZM9.43709923716 11.0L8.48917922657 11.0L8.0 6.87502426276L8.0 4.0L10.0 4.0L10.0 6.87502426276L9.43709923716 11.3799755923Z" /> 
          <Setter Property="ToolTip"> 
           <Setter.Value> 
            <StackPanel> 
             <StackPanel Orientation="Vertical"> 
              <TextBlock Text="{Binding LastFailedBuildTimestamp, TargetNullValue=UNSPECIFIED, StringFormat={}When: {0}}" /> 
              <TextBlock Text="{Binding LastBuildError, TargetNullValue=UNSPECIFIED, StringFormat={}Why: {0}}" /> 
             </StackPanel> 
            </StackPanel> 
           </Setter.Value> 
          </Setter> 

         </DataTrigger> 
         <MultiDataTrigger> 
          <MultiDataTrigger.Conditions> 
           <Condition Binding="{Binding LastModifiedTimestamp, Converter={StaticResource IsNullConverter}}" Value="False" /> 
           <Condition Binding="{Binding LastFailedBuildTimestamp, Converter={StaticResource IsNullConverter}}" Value="True" /> 
          </MultiDataTrigger.Conditions> 
          <Setter Property="Visibility" Value="Visible" /> 
          <Setter Property="Data" Value="M 0,11 0,14 3.0056497,14 11.706214,5.220339 8.7005652,2.2146893 0,11 0,11 Z M 14,2.9265537 C 14.316384,2.6101695 14.316384,2.1355932 14,1.819209 L 12.180791,0 C 11.864407,-0.31638417 11.38983,-0.31638417 11.073446,0 L 9.6497174,1.4237288 12.655366,4.4293786 14,3 14,3 Z" /> 
          <Setter Property="ToolTip"> 
           <Setter.Value> 
            <StackPanel> 
             <StackPanel Orientation="Vertical"> 
              <TextBlock Text="{Binding LastModifiedTimestamp, TargetNullValue=UNSPECIFIED, StringFormat={}When: {0}}" /> 
              <TextBlock Text="{Binding LastModifiedBy, TargetNullValue=UNKNOWN, StringFormat={}Modified by: {0}}" /> 
             </StackPanel> 
            </StackPanel> 
           </Setter.Value> 
          </Setter> 
         </MultiDataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Path.Style> 
     </Path>