【发布时间】:2021-04-23 09:03:47
【问题描述】:
我有一个应用需要在其绑定属性为空时隐藏框架。有两个框架(在 CollectionView 内),每个框架可能会或可能不会接收任何数据。如果他们不这样做,我希望他们消失。我已经尝试了多种方式,包括附加代码中的方式。
这是这些框架的屏幕截图(圆圈控件)。那些完全是白色的没有附加到任何数据上,所以它们是空的或空的(老实说不确定是哪个。我相信它们是空的)。
以下是第一帧的代码。
<Frame CornerRadius="50"
HeightRequest="45"
WidthRequest="45"
Padding="0"
BackgroundColor="{Binding Assessments[0].BackgroundColor}">
<Frame.Triggers>
<DataTrigger TargetType="Frame"
Binding="{Binding Assessments[0].TypeLetter}"
Value="x:null">
<Setter Property="IsVisible" Value="false"/>
</DataTrigger>
</Frame.Triggers>
<Label Text="{Binding Assessments[0].TypeLetter}"
FontSize="24"
TextColor="White"
FontAttributes="Bold"
VerticalTextAlignment="Center"
HorizontalTextAlignment="Center"/>
</Frame>
这是第二帧的代码。
<Frame CornerRadius="50"
HeightRequest="45"
WidthRequest="45"
Padding="0"
BackgroundColor="{Binding Assessments[1].BackgroundColor}">
<Frame.Triggers>
<DataTrigger TargetType="Frame"
Binding="{Binding Assessments[1].TypeLetter, TargetNullValue=''}"
Value="">
<Setter Property="IsVisible" Value="False"/>
</DataTrigger>
</Frame.Triggers>
<Label Text="{Binding Assessments[1].TypeLetter}"
x:Name="lable2"
FontSize="24"
TextColor="White"
FontAttributes="Bold"
VerticalTextAlignment="Center"
HorizontalTextAlignment="Center"/>
</Frame>
这些都不起作用。我知道我可以通过实现转换器来解决这个问题,但我很想知道是否有办法这样做,因为我更喜欢触发器。早在 2017 年,使用 x:null 方法似乎存在一些错误,但我认为它会在 4 年后得到修复。
无论如何,任何帮助/指针都会很棒。我不知道如何进行这项工作。
另外,这里是他们绑定到的对象的代码。
public class Assessment
{
public string Name { get; set; }
public AssessmentType Type { get; set; }
public bool IsComplete { get; set; }
public string BackgroundColor
{
get { return IsComplete ? "#558f45" : "Gray"; }
set { BackgroundColor = value; }
}
public DateTime Start { get; set; }
public DateTime End { get; set; }
public string Date => Start.ToString("MMM dd") + " - " + End.ToString("MMM dd");
public string TypeLetter => Type.ToString().Substring(0, 1).ToUpper();
public Assessment(string name, AssessmentType type, bool isComplete, DateTime startTime, DateTime endTime)
{
Name = name;
Type = type;
IsComplete = isComplete;
Start = startTime;
End = endTime;
}
}
【问题讨论】:
-
你不能像
Assessments[1].TypeLetter那样使用Xaml绑定 -
@FreakyAli 这些绑定实际上正在工作。这就是我为框架上的标签获取 O 和 P 的方式。
-
是吗?他们过去没有那样工作,所以我认为他们仍然没有。感谢您的回复
-
而不是 Type.ToString(),尝试使用 Convert.ToString(Type) 可能你会得到你需要的。
标签: c# xamarin xamarin.forms binding datatrigger