在WPF,MVVC应用程序中,我的列表框非常正常:
<ListBox ItemsSource="{Binding Friends}">
</ListBox>
然后每个列表项使用以下datatemplate:
<DataTemplate DataType="{x:Type model:Friend}">
<Border BorderThickness="1" BorderBrush="Gray" Padding="3" Name="border" Margin="3">
<StackPanel Grid.Row="1" Grid.Column="2" Orientation="Horizontal">
<TextBlock Name="DescriptionDTDataType" Text="{Binding Path=ConnectedUserID}" />
<TextBlock Name="StatusTitle" Margin="8,0,4,0">Status:</TextBlock>
<TextBlock Name="Status" Text="{Binding Path=Approved}" />
<Button Content="Approve" Command="{x:Static inf:Commands.ApproveUserConnection}" CommandParameter="{Binding}"></Button>
<Button Content="Disapprove" Command="{x:Static inf:Commands.DisapproveUserConnection}" CommandParameter="{Binding}"></Button>
</StackPanel>
</Border>
</DataTemplate>
问题是......我想在Friend.Approved属性的基础上隐藏其中一个按钮。例如,如果Friend.Approved具有价值&#34;已批准&#34;我想隐藏按钮已批准并仅显示按钮Dissaprove。另一方面,如果Friend.Approved有价值&#34;不赞成&#34;然后我想反对。怎么做到这一点?
谢谢。
答案 0 :(得分:1)
除了创建IValueConverter之外,还有一个使用DataTriggers的纯XAML解决方案
只需将其添加到您的DataTemplate:
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Approved}" Value="approved" >
<Setter TargetName="Approve" Property="Visibility" Value="Collapsed"/>
</DataTrigger>
<DataTrigger Binding="{Binding Approved}" Value="disapproved" >
<Setter TargetName="Disapprove" Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</DataTemplate.Triggers>
并命名您的按钮:
<Button Name="Approve" Content="Approve" ...></Button>
<Button Name="Disapprove" Content="Disapprove" ...></Button>
但是,如果要在多个DataTemplates中的多个位置重用此隐藏逻辑,最好将Approved文本写入Visibility转换器。
答案 1 :(得分:0)
将“按钮可见性”属性绑定到Approved
,并使用值转换器将Approved
转换为“可见性”值。