如何将元素内容绑定到自定义Command属性

时间:2016-09-10 19:57:32

标签: c# wpf

我有一个自定义ICommand类,我试图添加属性“DisplayName”和“ToolTipText”:

internal class MyCommand : ICommand
{
// ...
        internal string DisplayName {
            get { return displayName; }
            set {
                if (displayName == value)
                    return;
                if (value == null)
                    value = "";
                displayName = value;
                OnPropertyChanged(nameof(DisplayName));
            }
        }

        internal string ToolTipText {
            get { return toolTipText; }
            set {
                if (toolTipText == value)
                    return;
                if (value == null)
                    value = "";
                toolTipText = value;
                OnPropertyChanged(nameof(ToolTipText));
            }
        }
// ...
}

我的ViewModel返回ICommand的自定义类型:

    public MyCommand MyButtonCommand {
        get {
            return myButtonCommand?? (myButtonCommand = new MyCommand (
            // ...
            );
        }
    }

在XAML中,我将命令绑定到Button,我想从Command上的DisplayName设置按钮Content。根据答案的要求,按钮绑定是这样的:

<Button HorizontalAlignment="Right" VerticalAlignment="Center"
        Margin="12,0,0,0" DockPanel.Dock="Right" TabIndex="10"
        Command="{Binding MyButtonCommand, Mode=OneWay}"/>

以下结果:

Content="{Binding Command, RelativeSource={RelativeSource Self}}"

这样,按钮的内容就是Command上的ToString()。但我无法访问自定义ICommand对象的属性。

像这样的XAML语法不起作用:

Content="{Binding Command.DisplayName, RelativeSource={RelativeSource Self}}"

Content="{Binding Command/DisplayName, RelativeSource={RelativeSource Self}}"

有什么答案吗?

...现在回答:我的DisplayName和ToolTipText属性只需要公开......

1 个答案:

答案 0 :(得分:0)

以下xaml都在运作

经典的,标准的

Content="{Binding MyButtonCommand.DisplayName}" Command="{Binding MyButtonCommand}"

非常不寻常的

`Content="{Binding Command.DisplayName, RelativeSource={RelativeSource Self}}" Command="{Binding MyButtonCommand}`"

假设MyCommand和DisplayName都是公开不是内部

  public class MyCommand : ICommand
    {
        public string DisplayName

并且DisplayName有一个值...