C# 如何在视图模型方法中将绑定属性用作参数
我有一个使用Prism框架的Xamarin形式的视图模型。我有很多UI元素,每个元素在我的视图模型中都有很多具有类似行为的绑定属性。在一个命令操作之后,我希望为每个元素执行完全相同的逻辑,而不必为每个元素重复相同的逻辑 更具体一些。我在一幅画上画了地标。每个地标都可以拖动。每个地标都有一个命令来激活拖动模式,从而更改地标的图标及其大小。当我创建一个方法在单个方法中模块化这种行为时,作为参数接收每个landmark绑定属性,属性的setter永远不会被触发,因此UI元素永远不会被更改 这就是我尝试过的: 我的地标XAMLC# 如何在视图模型方法中将绑定属性用作参数,c#,xamarin,data-binding,xamarin.forms,prism,C#,Xamarin,Data Binding,Xamarin.forms,Prism,我有一个使用Prism框架的Xamarin形式的视图模型。我有很多UI元素,每个元素在我的视图模型中都有很多具有类似行为的绑定属性。在一个命令操作之后,我希望为每个元素执行完全相同的逻辑,而不必为每个元素重复相同的逻辑 更具体一些。我在一幅画上画了地标。每个地标都可以拖动。每个地标都有一个命令来激活拖动模式,从而更改地标的图标及其大小。当我创建一个方法在单个方法中模块化这种行为时,作为参数接收每个landmark绑定属性,属性的setter永远不会被触发,因此UI元素永远不会被更改 这就是我尝试
<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>
landmark绑定属性:
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); }
}
我想为每个不触发属性设置器的landmark调用的方法:
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
谢谢
ToggleDraggingMode(ChinLandmarkBounds, ChinLandmarkIcon, ChinSize, activateDraggingMode);