如果Url不为null,我希望能够显示超链接,否则我不希望显示该链接。
我该如何解决这个问题?到目前为止,这是我的代码。我的列表框模板示例:
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Background="#CD85C9E9"
Name="spListItem"
Orientation="Horizontal"
HorizontalAlignment="Stretch">
<Label>
<TextBlock Text="{Binding Name}" />
<!-- How to define if Url Is Null -->
<Hyperlink Name="MyLink" Click="MyLink_Click" />
</Label>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
我的班级:
public class MyList
{
public string Name{get;set;}
public string? Url{get;set;}
}
答案 0 :(得分:3)
两个选项:
编写自定义值转换器,将对象(在本例中为您的Url)转换为可见性,具体取决于它是否为null,并在Visibility属性上设置它:
使用DataTrigger将可见性设置为false。
<Hyperlink Name="MyLink" Click="MyLink_Click">
<Hyperlink.Style>
<Style TargetType="Hyperlink">
<Style.Triggers>
<DataTrigger Binding="{Binding Url}" Value="{x:Null}">
<Setter Property="Visibility" Value="Collapsed"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Hyperlink.Style>
</Hyperlink>
第二个更冗长,但可以完全用xaml完成。但是,在第一种情况下,您将不止一次使用自定义转换器。
顺便说一下
public string? Url{get;set;}
String
是一个引用类型,因此已经可以为空了。
答案 1 :(得分:1)
我建议您遵循MVVM模式,以便所有业务逻辑细节都由ViewModel封装(或者至少将其保留在代码中而不是复杂的View触发器等)。
所以基本上你可以公开属性
public bool IsUrlProvided { get; private set; }
它封装了所有知道正确URL格式详细信息的逻辑,并且在View中只是将Visibility绑定到此标志usng BooleanToVisibilityConverter。
<Button Visibility="{Binding IsUrlProvided,
Converter={StaticResource BooleanToVisibilityConverter}}" />
这样,每次逻辑更改时都不需要更改视图