2016-09-16 7 views
0

Я пытаюсь сделать пользовательский контроль с свойством зависимости. Мне нужно выполнить определенную логику, когда свойство зависимостей будет изменено вне пользовательского контроля, но эта логика не должна выполняться, когда свойство зависимостей изменяется изнутри пользовательского элемента управления. У меня этот небольшой образец. Я хочу только выполнить определенную логику, когда значение задано из mainwindow, а не когда оно установлено, установив флажок. Я не знаю, правильно ли работает PropertyChangedCallback, но это то, что у меня есть.Одностороннее свойство зависимостей изменило уведомление

UserControl:

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; 
    } 
} 

UserControl 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> 

MainWindow:

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

MainWindow 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> 

ответ

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; 
} 
+0

Действительно, это просто? Мне так глупо. Позвольте мне попробовать это в моем реальном приложении, прежде чем я отмечу это как ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^