【问题标题】:Bind in code to Bindable Attached Property在代码中绑定到可绑定的附加属性
【发布时间】:2021-07-27 20:35:57
【问题描述】:

来自官方document

然后在特定控件上设置附加属性时使用命名空间声明,如以下 XAML 代码示例所示:

<Label Text="Label Shadow Effect" local:ShadowEffect.HasShadow="true" />

等效的 C# 代码如以下代码示例所示:

var label = new Label { Text = "Label Shadow Effect" }; ShadowEffect.SetHasShadow (label, true);

我的问题:

以下 XAML 绑定的等效 C# 代码:

<Label Text="Label Shadow Effect" local:ShadowEffect.HasShadow="{Binding HasShadow}" />

示例场景

我有一个LongPressEffect,它公开了一个附加的可绑定属性Command。效果附在Label上,如下图:

<Label x:Name="LongPressLabel"
       Text="Long press me"
       effects:LongPressEffect.Command = "{Binding MyCommand}">
   <Label.Effects>
       <effects:LongPressEffect />
   </Label.Effects>
</Label>

如何对 C# 代码进行相同的绑定?

相似主题

似乎与here 提出的问题相同。有什么想法吗?

【问题讨论】:

  • 并非如此。该线程提到的是将属于 TextBox 的属性Text 绑定到附加属性(作为绑定的path 中的附加属性)。我想要的是将附加属性(一个本身不属于元素的属性,在我的 XAML 示例中为Label)绑定到另一个属性。

标签: c# xaml xamarin binding attached-properties


【解决方案1】:

显然这对我有用:


var label = new Label()
{
    Text = "Long press me"
};

var longPressedEffect = new LongPressedEffect();
label.Effects.Add(longPressedEffect);

Binding binding = new Binding();
binding.Path = nameof(MyCommand);
binding.Mode = BindingMode.TwoWay;
label.SetBinding(longPressedEffect.CommandProperty, binding);

【讨论】:

    【解决方案2】:

    根据this document,可以试试下面的代码:

            label1.Effects.Add(new LongPressedEffect());
            LongPressedEffect.SetCommand(label1,mycommand);
    

    C#中的等价标签

       <Label
            x:Name="label1"
            effects:LongPressedEffect.Command="{Binding command1}"
            effects:LongPressedEffect.CommandParameter="{Binding .}"
            BackgroundColor="Red"
            Text="Long Press Me!">
            <Label.Effects>
                <effects:LongPressedEffect />
            </Label.Effects>
        </Label>
    

    【讨论】:

    • 在我看来,使用LongPressedEffect.SetCommand(label1,mycommand) 只是为 LongPressedEffect 命令设置了一个静态值,而不是绑定,这会在 mycommand 更改时更改值
    猜你喜欢
    • 2013-09-17
    • 2011-02-07
    • 2017-01-25
    • 1970-01-01
    • 2011-11-01
    • 2011-02-14
    • 1970-01-01
    • 2012-08-12
    • 1970-01-01
    相关资源
    最近更新 更多