将属性称为方法

时间:2016-05-31 10:19:14

标签: c# wpf

我在ViewModel

中拥有此属性
private string _message;
public string Logger
{
        get { return _message; }
        set
        {
            _message = Logger.GetMessage();
            Instance.OnPropertyChanged();
        }
 }

此属性自动设置Logger实例的值。现在我遇到了一个问题,因为要将内容分配给Label我应该这样做:

Label.Content = ViewModel.Logger;

但我只想这样打电话:

ViewModel.Logger;

因为该值是在属性内部自动设置的,所以我收到此消息的问题是:

  

可以仅用作指令,分配,调用,增加,减少和新表达

标签将自动更新,因为我已设置绑定:

<Label Content="{Binding Logger, IsAsync=True}" />

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

  

但我只想这样打电话:

ViewModel.Logger;

你不能。属性不是方法。如果您打算将属性用作方法,请改为创建方法。

您不能指望Label设置值,因此您的整个绑定毫无意义。您可以使用该属性来获取,并使用一种方法来设置。

答案 1 :(得分:1)

如果您的XAML是对的。您可以更改Logger属性,如下所示:

private string _message;
    public string Logger
    {
        get 
        {
            if (_message == null)
            {
                _message = Logger.GetMessage();
            }
            return _message; }
        set
        {
            _message = Logger.GetMessage();
            Instance.OnPropertyChanged();
        }
    }

并且您不需要使用任何

Label.Content = ViewModel.Logger;

ViewModel.Logger;

binding get方法的原因将在_message字段为null时首次执行,您的值逻辑(GetMessage())将被执行并且Lable将显示该值。