Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在视图模型方法中将绑定属性用作参数_C#_Xamarin_Data Binding_Xamarin.forms_Prism - Fatal编程技术网

C# 如何在视图模型方法中将绑定属性用作参数

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

我有一个使用Prism框架的Xamarin形式的视图模型。我有很多UI元素,每个元素在我的视图模型中都有很多具有类似行为的绑定属性。在一个命令操作之后,我希望为每个元素执行完全相同的逻辑,而不必为每个元素重复相同的逻辑

更具体一些。我在一幅画上画了地标。每个地标都可以拖动。每个地标都有一个命令来激活拖动模式,从而更改地标的图标及其大小。当我创建一个方法在单个方法中模块化这种行为时,作为参数接收每个landmark绑定属性,属性的setter永远不会被触发,因此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>
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);