2011-12-21 1 views
3

У меня есть пользовательский элемент управления со свойством определяется следующим образом:Silverlight на Windows Phone: IValueConverter никогда не вызывается для пользовательских связанных свойств

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> 

Но в отладчике я вижу, что значение, которое приходит к DataSource сеттер имеет тип System.Windows.Data.Binding!

Преобразователь значения never введен с параметром «DataSource», но для «DataContext» он отлично работает. Конвертер существует только для целей отладки, без чего все работает одинаково.

Как создать привязку к свойствам, которые я определил?

+0

Не думаю, что я точно понимаю, что вы пытаетесь сделать здесь. Зачем вам нужно дважды конвертировать конвертер? Один раз в DataContext и один раз в DataSource? –

+0

Я хочу назвать это в DataSource и получить значение. DataContext только для того, чтобы показать, что такая же точная разметка работает для унаследованного свойства. –

+0

Что вы делаете в DataSource, вы вызываете его, вызывая метод, который передавал бы его получателю. Вы пытаетесь передать DataContext диаграммы в качестве параметра в метод конвертера? Можете ли вы опубликовать код сценария, который не работает, вместе с подписью конвертера? Почему вы пытаетесь преобразовать datacontext, передав datacontext? –

ответ

1

ОК, извините, я, дебил. Выключается в 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()); 
    } 
Смежные вопросы