Возможность отображения контента на основе логики с использованием XAML для WPF

#wpf #xaml #mvvm

Вопрос:

В приложении, которое использует WPF (XAML) вместе с шаблоном MVVM, у меня есть следующий фрагмент кода XAML, который отлично работает,

 lt; DataGridTemplateColumn Header="Status"gt;  lt;DataGridTemplateColumn.CellTemplategt;  lt;DataTemplategt;   lt;Grid VerticalAlignment="Center" HorizontalAlignment="Center" Visibility="{Binding Path=IsCompleted, Converter={BoolToVisibilityConverter}}"gt;  lt;Path Data=" "  Fill="# "  Stretch=" "  Height=""  Width=""/gt;  lt;/Gridgt;  lt;/DataTemplategt;  lt;/DataGridTemplateColumn.CellTemplategt;  

Логическое свойство «IsCompleted» определяется в соответствующей модели представления, которая заполняется «true» или «false». Эта функция работает так, как ожидалось, до этого момента, когда логическое свойство имеет значение true, ожидаемый значок виден, но я надеюсь, что улучшение, которое я надеюсь сделать, заключается в том, чтобы ввести логику, в которой, когда логическое свойство имеет значение false, как это происходит сейчас, вместо пустого места в области (поскольку значок не будет виден) для отображения строки или текстового блока вместо этого, что-то вроде «В полном».

Можно ли это сделать со стороны xaml или мне следует внести некоторые изменения в модель представления?

Ответ №1:

Вы можете добавить a DataTrigger к DataTemplate тому , что задает Visibility свойство Path и/или a TextBlock , например:

 lt;DataTemplategt;  lt;Grid VerticalAlignment="Center" HorizontalAlignment="Center"gt;  lt;Path x:Name="path"  Data=" "  Fill="# "  Stretch=" "  Height=""  Width="" Visibility="Collapsed"/gt;  lt;TextBlock x:Name="tb" Text="InComplete" /gt;  lt;/Gridgt;  lt;DataTemplate.Triggersgt;  lt;DataTrigger Binding="{Binding IsCompleted}" Value="True"gt;  lt;Setter TargetName="tb" Property="Visibility" Value="Collapsed" /gt;  lt;Setter TargetName="path" Property="Visibility" Value="Visible" /gt;  lt;/DataTriggergt;  lt;/DataTemplate.Triggersgt; lt;/DataTemplategt;