Windows Phone 8.1:DependencyProperty回调方法只触发一次(在值更改之前,将触发Noti

本文关键字:一次 Noti Phone DependencyProperty 回调 Windows 方法 | 更新日期: 2023-09-27 18:21:00

我已经在Windows Phone 8.1应用程序(而不是SilverLight)中注册了此行为:

public class MessageBoxDisplayBehavior : DependencyObject, IBehavior
{   
    public string Message
    {
        get { return (string)GetValue(MessageProperty); }
        set { SetValue(MessageProperty, value); }
    }
    public static readonly DependencyProperty MessageProperty = DependencyProperty.Register("Message", typeof(string), typeof(MessageBoxDisplayBehavior), new PropertyMetadata(string.Empty, OnMessageChanged)); 
    private static void OnMessageChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var msg = e.NewValue as string;
        if (!string.IsNullOrEmpty(msg))
        {
            //this is fired only once, even if I call 
        }
    } 
}

Xaml:

<Page
    x:Class="Client.Views.PageViewBase"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Client.Views"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:behaviors="using:Client.Behaviors"
    xmlns:i="using:Microsoft.Xaml.Interactivity"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <i:Interaction.Behaviors>
        <behaviors:MessageBoxDisplayBehavior Message="{Binding MessageBoxMessage}" />
    </i:Interaction.Behaviors>
</Page>

继承Caliburn.Micro Screen 的视图模型

public abstract class ViewModelBase : Screen
{
    public string MessageBoxMessage
    {
        get
        {
            return _messageBoxMessage;
        }
        set
        {
            _messageBoxMessage = value;
            NotifyOfPropertyChange(() => MessageBoxMessage);
        }
    }
    private string _messageBoxMessage;
}

这里的问题是,当我将viewmodel中的属性MessageBoxMessage设置为值"test"时,就会触发MessageBoxDisplayBehavior类的方法OnMessageChanged。没事。

但是,当我再次将其设置为值"test"时,方法OnMessageChanged不会再次触发(但通知属性已更改,我可以订阅PropertyChanged事件并捕获它)。

当我将值设置为其他值时(例如"test2"),它又开始工作了。

依赖对象是否在内部持有属性的值,并仅在其发生更改时触发更改?我能以某种方式覆盖它吗?

我希望在调用NotifyPropertyChanged时激发DependencyProperty回调方法,即使值没有更改。

Windows Phone 8.1:DependencyProperty回调方法只触发一次(在值更改之前,将触发Noti

如果为属性重新分配相同的值"test",则属性不会更改。

如果您继续为它分配不同的字符串值,它将发生变化。

请记住,这是"属性已更改"

在您的情况下,您不会更改值。您只是不断提交相同的值,期望得到不同的结果。