按钮不会触发带参数的命令

时间:2017-06-29 17:49:36

标签: c# xaml xamarin.forms

我在尝试将参数传递给命令时遇到了不好的时间。

我在XAML代码中有以下内容:

clone

在代码隐藏中,我像这样绑定:

    <Button Text="{Binding ButtonText}" x:Name="btnCaptureNegotiation" BackgroundColor="#3276b1" 
                        TextColor="White" Clicked="OnCaptureNegotiationClicked"  
                        CommandParameter="{Binding Client, Path=cod_cte}" Command="{Binding LoadULastNegotiationCommand}"  ></Button>
                    <StackLayout Orientation="Vertical" x:Name="captureLayout"  IsVisible="{Binding IsVisible}">
<!-- more code -->

和NegotiationVM类:

public Client client;
public NegociationVM negotiation = new NegotiationVM();

public ClientItemPage(Client client)
        {
            this.client = client;
          negotiation.Client = client; //STOP WORKING after adding this line
            InitializeComponent();
            captureLayout.BindingContext = negotiation;
            btnCaptureNegotiation.BindingContext = negotiation;
        }

private void OnCaptureNegotiationClicked(object sender, EventArgs args)
        {
            negotiation.IsVisible = !negotiation.IsVisible;
        }

...

我发现该命令被触发并尝试从服务获取资源,但我得到404因为我发现它没有发送参数,我只是在异步void LoadLastNegotiationAsync(字符串值)方法中放置一个断点来查找。

因为它没有发送任何内容,所以在代码隐藏页面中,在公共构造函数中,我将Client设置为协商中的同名属性(NegotiationVM的实例)。正如评论所示,命令STOP工作,只是通过添加该行就不会被按钮触发。

绑定有什么问题?如何正确发送该客户端的字符串属性?

1 个答案:

答案 0 :(得分:1)

如果Cliente有一个名为cod_cte的媒体资源。如此绑定:

CommandParameter="{Binding Cliente.cod_cte}"

如果该媒体资源的名称为Client而不是Cliente,请忽略e上的Cliente结尾:

CommandParameter="{Binding Client.cod_cte}"