c# - 如何在视图模型方法中使用绑定属性作为参数
问题描述
我在 Xamarin Forms 中有一个使用 Prism 框架的视图模型。我有很多 UI 元素,每个元素在我的视图模型中都有很多具有相似行为的绑定属性。在命令操作之后,我想对这些元素中的每一个执行完全相同的逻辑,而不必为每个元素重复相同的逻辑。
更具体一点。我在图片上有地标。每个地标都可以拖动。每个地标都有一个激活拖动模式的命令,该模式会改变地标的图标及其大小。当我创建一个方法以在单个方法中模块化这种行为时,接收每个地标绑定属性作为参数,属性的设置器永远不会触发,因此 UI 元素永远不会改变。
这是我尝试过的:
我的里程碑式 XAML
<Controls:LandmarkView
DragMode="Touch"
LBounds="{Binding ChinLandmarkBounds, Mode=TwoWay}"
DragDirection="All"
IsVisible="{ Binding AreLandmarksVisible }"
ToggleDraggingCommand="{Binding ChinToggleDraggingCommand}"
DraggingBoundaries="{Binding ChinDraggingBoundaries}">
<Controls:LandmarkView.Content>
<AbsoluteLayout>
<Image BackgroundColor="#72C8BB"
WidthRequest="{Binding LandmarkLineWidth}"
AbsoluteLayout.LayoutBounds= "{Binding LandmarkLineXPos}"
AbsoluteLayout.LayoutFlags= "YProportional,WidthProportional"/>
<ffimageloading:CachedImage
WidthRequest="{Binding ChinSize}"
HeightRequest="{Binding ChinSize}"
Source="{Binding ChinLandmarkIcon, Converter={StaticResource SvgImageSourceConverter}}">
</ffimageloading:CachedImage>
</AbsoluteLayout>
</Controls:LandmarkView.Content>
</Controls:LandmarkView>
视图模型中用于拖动切换的命令:
public ICommand ChinToggleDraggingCommand { get; set; }
地标绑定属性:
private Rectangle _chinLandmarkBounds;
public Rectangle ChinLandmarkBounds
{
get { return _chinLandmarkBounds; }
set
{
SetProperty(ref _chinLandmarkBounds, value);
CalculateMouthRightEdgeDraggingBoundaries();
CalculateMouthLeftEdgeDraggingBoundaries();
CalculateChinDraggingBoundaries();
}
}
private string _chinLandmarkIcon;
public string ChinLandmarkIcon
{
get { return _chinLandmarkIcon; }
set { SetProperty(ref _chinLandmarkIcon, value); }
}
private Rectangle _chinDraggingBoundaries;
public Rectangle ChinDraggingBoundaries
{
get { return _chinDraggingBoundaries; }
set { SetProperty(ref _chinDraggingBoundaries, value); }
}
private int _chinSize;
public int ChinSize
{
get { return _chinSize; }
set { SetProperty(ref _chinSize, value); }
}
我想为每个不触发属性设置器的地标调用的方法:
private void ToggleDraggingMode(Rectangle landmarkBounds, string landmarkIcon, int size, bool activateDraggingMode)
{
if (activateDraggingMode)
{
landmarkIcon = ControlsArrowsAllRed;
size = size * 2;
landmarkBounds = new Rectangle((double)landmarkBounds.X - size / 2, (double)landmarkBounds.Y - size / 2, size, size);
}
else
{
landmarkIcon = ControlsRedFull;
size = size / 2;
landmarkBounds = new Rectangle(landmarkBounds.X + size / 2, (double)landmarkBounds.Y + size / 2, size, size);
}
}
对上一个方法的调用:
ToggleDraggingMode(ChinLandmarkBounds, ChinLandmarkIcon, ChinSize, activateDraggingMode);
如何将绑定属性作为方法的参数传递,并在为方法参数(在前面的代码中为landmarkBounds
局部变量)赋值时调用 setter?
谢谢
解决方案
推荐阅读
- python - 无法从“werkzeug.http”导入名称“dump csp header”
- javascript - TypeError:无法读取未定义的属性“客户端”
- python - 在 Anaconda 中安装包 Quspin 后,它仍然显示“找不到模块”
- vba - 使用 vba 将动态逗号分隔的数据拆分成对以在 powerpoint 中使用
- javascript - cors 请求获取响应
- hybris - 如何在页面源中保留最低价格变体的 URL
- java - 是否可以将文件保存到任何集合中,如 hashmap 或 hashtable?
- php - 节点js中的PHP函数
- terraform - 使用 Terraform/Programmatic 与 Databricks 集成 Azure 密钥保管库
- python-3.x - 如何使用正则表达式 python 在大文件中查找地名