Silverlight задать путь свойства в конвертере? - PullRequest
0 голосов
/ 04 марта 2012

У меня есть список, в котором есть несколько таблиц данных для его элементов. Табличка данных выбирается с помощью конвертера и интерпретирует коллекцию объектов ListBox.

Внутри конвертера я пытаюсь привязать свойство из текстового контекста данных (вне списка lisbox) к элементу управления TextBox таблицы данных.

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

Это не работает. Есть идеи, что я делаю не так?

Спасибо.

1 Ответ

1 голос
/ 05 марта 2012

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

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

...