Windows Phone上的Silverlight: IValueConverter永远不会被自定义绑定属性调用

本文关键字:自定义 绑定 调用 属性 永远 上的 Phone Silverlight IValueConverter Windows | 更新日期: 2023-09-27 18:18:26

我有一个定义如下属性的用户控件:

public partial class ChartEx : UserControl
{
    private object _dataSource;
    public object DataSource
    {
        get { return _dataSource; }
        set 
        { 
            _dataSource = value; //break here
        }
    }
}

在我的xaml,我试图将它绑定到一个集合(从内部数据模板):

<DataTemplate x:Key="tmplCounter">
    <my:ChartEx 
             DataContext="{Binding Converter={StaticResource convTest}, ConverterParameter='DataContext'}"
             DataSource="{Binding Converter={StaticResource convTest}, ConverterParameter='DataSource'}">
    </my:ChartEx>
</DataTemplate>

但是在调试器中,我看到数据源设置器的值类型是System.Windows.Data.Binding!

值转换器是从不输入参数"DataSource",但对于"DataContext"它工作完美。转换器的存在仅仅是为了调试的目的,没有它,一切都是一样的。

我如何使绑定为我定义的属性工作?

Windows Phone上的Silverlight: IValueConverter永远不会被自定义绑定属性调用

好吧,对不起,我是个白痴。事实证明,在XAML中不能绑定到"简单"属性。该道具必须是一个依赖属性。以下工作:

public partial class ChartEx : UserControl
{
    public event EventHandler DataSourceChanged;
    public object DataSource
    {
        get { return GetValue(DataSourceProperty); }
        set { SetValue(DataSourceProperty, value); }
    }
    public static readonly DependencyProperty DataSourceProperty =
        DependencyProperty.Register(
            "DataSource",
            typeof(object),
            typeof(ChartEx),
            new PropertyMetadata(true, OnDataSourcePropertyChanged));
    private static void OnDataSourcePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        ChartEx source = d as ChartEx;
        if (source.DataSourceChanged != null)
            source.DataSourceChanged(source, new EventArgs());
    }