-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永遠不會被調用。
什麼你綁定到任何提示? –
如果可以訪問,請在IsNull轉換器中放置一個斷點。 – AnjumSKhan