0

我有一个文本块

<TextBlock Width="180" Text="{Binding Details, UpdateSourceTrigger=PropertyChanged}"

在视图模型中

public string Details
    {
        get
        {
            string strInfo;      
            strInfo = Resources.SharedOn+": " + DateString;

            strInfo += "\n"+Resources.Access+": " + AccessString;

            if (ExpiryString != Resources.ShareExpireNever)
            {
                strInfo += "\n" + Resources.ShareExpire + ": " + ExpiryString;
            }
            if (Note != null && Note != "")
            {
                strInfo += "\n"+Resources.ShareNote+": " + Note;
            }
            return strInfo;
        }
        set
        {
            SetValue(DetailsProperty, value);
        }
    }

我想以这样一种方式绑定此属性,即每当用户在 UI 中进行任何更改时,TextBlock这三个值都会立即反映这些值。我已经添加了

UpdateSourceTrigger=PropertyChanged

但这不起作用。任何想法为什么它不起作用?

4

2 回答 2

0

我看到的主要问题是你试图使用 DP 作为价值转换器

而不是在详细信息属性中进行连接,而是使用多重绑定在 GUI 中进行, http: //msdn.microsoft.com/en-us/library/system.windows.data.multibinding.aspx

然后,这将允许您将值转换器设置为转换和反转数据

于 2013-10-03T10:59:24.163 回答
0

如果您的其他属性是依赖属性,那么您应该在它们的声明中设置PropertyMetadata 。在那里您可以指定属性更改回调,您可以在其中Details通过调用其设置器来更新属性。

public static readonly DependencyProperty NoteProperty = 
    DependencyProperty.Register("Note", typeof (string), 
    typeof (YourObject), new PropertyMetadata(String.Empty, UpdateDetails));

    private static void UpdateDetails(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var o = (YourObject)d;
        o.UpdateDetails();
    }

    private void UpdateDetails()
    {
        string strInfo;
        strInfo = Resources.SharedOn + ": " + DateString;

        strInfo += "\n" + Resources.Access + ": " + AccessString;

        if (ExpiryString != Resources.ShareExpireNever)
        {
            strInfo += "\n" + Resources.ShareExpire + ": " + ExpiryString;
        }
        if (Note != null && Note != "")
        {
            strInfo += "\n" + Resources.ShareNote + ": " + Note;
        }
        Details = strInfo;
    }

如果您的其他属性不是依赖属性,那么您可以简单地UpdateDetails从它们的设置器中调用。

无论哪种方式,您都不应该修改依赖属性的 getter 和 setter。意思是,它们应该看起来像:

    public string Details
    {
        get { return (string) GetValue(DetailsProperty); }
        set { SetValue(DetailsProperty, value); }
    }

没有任何自定义代码。

于 2013-10-03T09:44:12.593 回答