2012-03-04 2 views
0

У меня есть Listbox, у которого есть несколько datatemplates для его элементов. Пакет данных выбирается с использованием конвертера и интерпретирует коллекцию объектов ListBox.Silverlight задает путь свойства в конверторе?

Внутри конвертера я пытаюсь связать свойство из datacontext (вне lisbox) с элементом управления TextBox элемента datatemplate.

ListBox:

<telerik:RadListBox 
      x:Name="listBox2" 
      ItemsSource="{Binding MyCollection, Mode=TwoWay}" 
      VerticalAlignment="Top" Height="400"> 

      <telerik:RadListBox.ItemTemplate> 
       <DataTemplate> 
        <ContentControl Content="{Binding}" 
            ContentTemplate="{Binding Converter={StaticResource myTestConverter}, ConverterParameter={StaticResource myViewModel}}" /> 
       </DataTemplate> 
      </telerik:RadListBox.ItemTemplate> 
     </telerik:RadListBox> 

DataTemplate:

<DataTemplate x:Key="TestResource1"> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock Text="{Binding propertyLabel}" 
         FontStyle="Italic" Width="120" /> 
      <TextBox x:Name="valueField" 
         FontSize="12" Width="50" 
         FontWeight="Bold" /> 
     </StackPanel> 
    </DataTemplate> 

Внутри метода новообращенного конвертера:

_dt = Application.Current.Resources["TestResource1"] as DataTemplate; 
       var context = _dt.LoadContent(); 

       var ctrl = FindControlByType<TextBox>(context, "valueField"); 

       Binding binding = new Binding("DataContext.Value1"); 
       binding.RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor) { AncestorType = typeof(MainPage) }; 

       TextBox txtBox = ctrl as TextBox; 
       BindingOperations.SetBinding(txtBox, TextBox.TextProperty, binding); 

Это doesen't работа. Любая идея, что я делаю неправильно?

Спасибо.

ответ

1

Причина, по которой LoadContent не работает для вас, заключается в том, что это обычно вызывается самим элементом управления во время OnApplyTemplate().

В этом случае мне было проще использовать XamlReader.Load() для загрузки пользовательского элемента DataTemplate и последующего присвоения его элементу управления.

+0

Привет, _dt.LoadContent() работает отлично, моя проблема в том, что привязка «DataContext.Value1» не выбрана. Я попробую ваше предложение создать динамическую базу данных динамически. Может быть, это сработает. Спасибо за ваш ответ. – asuciu

+0

Silverlight вызывает LoadContent(), а возвращаемые значения помещаются в визуальное дерево. Когда вы вызываете LoadContent, если вы не поместили его в визуальное дерево, вы не увидите никаких результатов. –

+0

Я думаю, что мы что-то здесь. У меня есть относительный источник в моей привязке, который выглядит так: string str = @ " TextBlock Text = "" {Binding propertyLabel} "" /> "; но я получаю эту ошибку mesage: Не удалось создать «System.Type» из текста «local: MainPage. Если я привяжусь к нормальному свойству, он отлично работает. – asuciu

Смежные вопросы