我有五个图像,当你点击其中一个,我希望这一个得到完全不透明,而另一个只得到一半,以显示它是选定的一个。
我正在使用MVVM,通常会怀疑我的方法是否正确
我在考虑将绑定的图像源的名称传递到属性中。
<StackLayout Grid.Row="3" Grid.Column="1" Orientation="Horizontal" Spacing="0">
<Image Source="{Binding StatusUnresolved}" HorizontalOptions="Center"
VerticalOptions="Center" HeightRequest="40" Opacity="{Binding StatusUnresolvedOpacity}">
<Image.GestureRecognizers>
<!--<TapGestureRecognizer Command="{Binding Source={x:Reference this}, Path=OnStatusTappedCommand}" CommandParameter="{Binding StatusUnresolved}" />-->
</Image.GestureRecognizers>
</Image>
</StackLayout>
稍后将字符串转换为状态的列表。
public List<IssueStatusModel> PossibleStatusValues
{
get
{
var items = new List<IssueStatusModel>
{
new IssueStatusModel("statusUnresolved.png", IssueStatus.Unresolved),
new IssueStatusModel("statusInProgress.png", IssueStatus.InProgress),
new IssueStatusModel("statusDone.png", IssueStatus.Done)
};
return items;
}
}
不透明度的属性
public double StatusDoneOpacity
{
get { return statusDoneOpacity; }
set
{
if (statusDoneOpacity != value)
{
statusDoneOpacity = value;
NotifyPropertyChanged(nameof(StatusUnresolvedOpacity));
}
}
}
public string StatusDone
{
get { return "statusDone.png"; }
}
public void OnStatusTapped(string fileName)
{
foreach (IssueStatusModel item in StatusValues)
{
if (item.Name != fileName) continue;
Issue.Status = item.Status;
StatusChecker();
return;
}
}
}
Switch语句更改所有不透明度。
private void StatusChecker()
{
switch (Issue.Status)
{
case IssueStatus.Unresolved:
StatusUnresolvedOpacity = 1;
StatusInProgressOpacity = 0.5;
StatusDoneOpacity = 0.5;
StatusText = "Unresolved";
break;
case IssueStatus.InProgress:
StatusUnresolvedOpacity = 0.5;
StatusInProgressOpacity = 1;
StatusDoneOpacity = 0.5;
StatusText = "In Progress";
break;
case IssueStatus.Done:
StatusUnresolvedOpacity = 0.5;
StatusInProgressOpacity = 0.5;
statusDoneOpacity = 1;
StatusText = "Done";
break;
}
}
1条答案
按热度按时间t3psigkw1#
我的解决方法是,如果您有多个映像,创建一个
ImageVm
并封装任何映像特定的实现细节,即枚举State
和IsSelected
通知属性。使用绑定到
IsSelected
MVVM属性的DataTrigger
来设置Opacity
,并说明是否需要更改映像源。显然,单击时,您需要设置IsSelected
属性并取消选择其他VMs
IsSelected
的DataTrigger
示例更新
你可以使用带有枚举的触发器,你可以使用tap识别器在你的主视图模态中触发命令。命令也可以带参数。
最好(知道您在评论中描述了什么)只创建一个State和Severity枚举并绑定到它,然后通过一个手势命令设置State和Severity。
然后,您可以为每个图像创建一个触发器,以更改每个图像在不同状态和严重性下的不透明度。