【问题标题】:One way dependency property changed notification一种方式依赖属性更改通知
【发布时间】:2016-09-16 10:10:18
【问题描述】:

我正在尝试使用依赖属性创建用户控件。当从用户控件外部更改依赖项属性时,我需要执行某些逻辑,但是当从用户控件内部更改依赖项属性时,不应执行该逻辑。我有这个小样本。我只想在从主窗口设置值时执行某些逻辑,而不是在通过单击复选框设置值时执行某些逻辑。我不知道PropertyChangedCallback是否正确,但这就是我所拥有的。

用户控制:

public partial class UserControl1 : UserControl
{
    public int MyProperty
    {
        get { return (int)GetValue(MyPropertyProperty); }
        set { SetValue(MyPropertyProperty, value); }
    }

    public static readonly DependencyProperty MyPropertyProperty =
        DependencyProperty.Register("MyProperty", typeof(int), typeof(UserControl1), new PropertyMetadata(new PropertyChangedCallback(OnPropertyChanged)));

    private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        // Only process the 5, don't process the 6
    }


    public UserControl1()
    {
        InitializeComponent();
    }

    private void checkBox_Click(object sender, RoutedEventArgs e)
    {
        MyProperty = 6;
    }
}

用户控件 xaml:

<UserControl x:Class="WpfApplication4.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    <Grid>
        <CheckBox x:Name="checkBox" Click="checkBox_Click"/>
    </Grid>
</UserControl>

主窗口:

public partial class MainWindow : Window
    {
        public int MainWindowProperty { get; set; }
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = this;
            MainWindowProperty = 5;
        }
    }

主窗口 xaml:

<Window x:Class="WpfApplication4.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication4"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <local:UserControl1 MyProperty="{Binding MainWindowProperty}"/>
    </Grid>
</Window>

【问题讨论】:

    标签: c# wpf dependency-properties


    【解决方案1】:
    private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        if (!disableProcessing)
        {
            // Only process the 5, don't process the 6
        }
    }
    
    bool disableProcessing = false;
    private void checkBox_Click(object sender, RoutedEventArgs e)
    {
        disableProcessing = true;
        MyProperty = 6;
        disableProcessing = false;
    }
    

    【讨论】:

    • 真的,就这么简单吗?我觉得自己好傻。在我将此标记为答案之前,让我在我的实际应用程序中尝试一下。
    猜你喜欢
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多