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"它工作完美。转换器的存在仅仅是为了调试的目的,没有它,一切都是一样的。
我如何使绑定为我定义的属性工作?
好吧,对不起,我是个白痴。事实证明,在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());
}