gpt4 book ai didi

c# - Windows Phone : IValueConverter is never called for a custom bound property 上的 Silverlight

转载 作者:行者123 更新时间:2023-11-30 18:01:54 25 4
gpt4 key购买 nike

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

public partial class ChartEx : UserControl
{
private object _dataSource;

public object DataSource
{
get { return _dataSource; }
set
{
_dataSource = value; //break here
}
}

}

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

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

但是在调试器中我看到 DataSource setter 的值是 System.Windows.Data.Binding 类型!

值转换器从不使用参数“DataSource”输入,但对于“DataContext”它工作得很好。 Converter 仅用于调试目的,没有它,事情以同样的方式工作。

如何使 Binding 对我定义的属性起作用?

最佳答案

好吧,对不起,我是个白痴。事实证明,在 XAML 中您无法绑定(bind)到“简单”属性。该 Prop 必须是一个依赖属性。以下作品:

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

关于c# - Windows Phone : IValueConverter is never called for a custom bound property 上的 Silverlight,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8592990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com