#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;