使用Dependency Property传递回调方法

时间:2015-06-19 13:18:45

标签: c# wpf xaml calendar attached-properties

我正在使用Jarloo's calendar control在我的WPF软件中显示日历。根据我的需要,我补充说每天都包含一个项目列表,比如List<Item> Items

Jarloo日历是我主要视觉工作室解决方案中的第二个项目。我这样使用这个控件:

<Jarloo:Calendar DayChangedCallback="{Binding DayChangedEventHandler}"/>

正如你所看到的,我希望我可以将一个方法从我的主项目传递到日历的项目,这样我就可以在Calendar的构造函数中添加该方法作为DayChanged事件的事件处理程序。

但是,通过依赖项收到的项目为空...

在日历代码中,我的依赖项属性定义为:

public static readonly DependencyProperty DayChangedCallbackProperty = DependencyProperty.Register("DayChangedCallback", typeof(EventHandler<DayChangedEventArgs>), typeof(Calendar));

我的“DayChangedEventHandler”定义为

public EventHandler<DayChangedEventArgs> DayChangedHandler { get; set; }
void DayChanged(object o, DayChangedEventArgs e)
{
}

// i set this way the DayChangedHandler property so that I can bind on it from the view
DayChangedHandler = new EventHandler<DayChangedEventArgs>(DayChanged);

有人对我有暗示吗?

非常感谢:) .x

1 个答案:

答案 0 :(得分:4)

以下是有关非静态字段问题的示例:

public partial class MainWindow : Window
{
   public bool IsChecked
   {
       get { return (bool)GetValue(IsCheckedProperty); }
       set { SetValue(IsCheckedProperty, value); }
   }

// Using a DependencyProperty as the backing store for IsChecked.  This enables animation, styling, binding, etc...
   public static readonly DependencyProperty IsCheckedProperty =
    DependencyProperty.Register("IsChecked", typeof(bool), typeof(MainWindow), new PropertyMetadata(false, new PropertyChangedCallback(PropertyChanged)));


   private static void PropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
   {
       MainWindow localWindow = (MainWindow)obj;
       Console.WriteLine(localWindow.TestString);
    }

   public string TestString { get; set; }

    public MainWindow()
    {
       InitializeComponent();

       TestString = "test";
       this.DataContext = this;
    }
}

以下是测试它的XAML:

<CheckBox Content="Case Sensitive" IsChecked="{Binding IsChecked}"/>

当属性更改时,将调用回调,在thix示例中,您可以访问非静态TestString属性。