我有五张图片,当你点击其中一张图片时,我希望那张图片获得完全不透明度,而另一张图片只获得一半,以显示它是所选图片。
我正在使用MVVM,并且通常想知道我是否采用正确的方式
我正在考虑将绑定到属性中的imagesource的名称传递给我。
myDf = (
sc.parallelize([
(34, 30, "2016-07-02 12:01:40", "2016-07-02 14:01:40"), (184, 32, "2016-07-03 12:21:23", "2016-07-07 12:01:40")
]).toDF(["itemid", "eventid", "startTime", "endTime"])
.withColumn("startTime", col("startTime").cast("timestamp"))
)
myDf = myDf.withColumn("endTime", col("endTime").cast("timestamp"))
timeFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"
timeFormat = (F.unix_timestamp('endTime', format=timeFormat) - F.unix_timestamp('startTime', format=timeFormat))
myDf = myDf.withColumn("Trip Duration", timeFormat)
myDf = myDf.withColumn("Day" , date_format('startTime', 'E'))
myDf.show()
稍后将字符串转换为状态的列表。
<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;
}
}
}
答案 0 :(得分:2)
id攻击方式,如果您有多个图像,请创建ImageVm
并封装任何特定于图像的实现细节,即枚举State
和IsSelected
通知属性。当然,如果您只有1张图片,这将变得非常简单,您不需要vms
如果需要更改图像源,请使用绑定到DataTrigger
MVVM属性的IsSelected
来设置Opacity
和状态。显然,点击后您需要设置IsSelected
属性并取消选择其他VMs
DataTrigger
IsSelected
示例
<Image Grid.Column="2" Stretch="None">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Setter Property="Opacity" Value="0.5" />
<Style.Triggers>
<DataTrigger Value="True" Binding="{Binding IsSelected}">
<Setter Property="Opacity" Value="0.5"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
<强>更新强>
您可以在枚举中使用触发器,并且可以使用点击识别器在主视图模式中触发命令。命令也可以带参数。
它可能更好(知道你在评论中描述的内容)只是使状态和严重性枚举并绑定它。并通过手势命令设置状态和严重性。
然后,您可以为每个图像创建一个触发器,以更改各种状态和严重性上每个图像的不透明度。