x: атрибут Name не всегда создает член или переменную поля - PullRequest
1 голос
/ 26 ноября 2009

Добавление атрибута x: Name к элементу XAML обычно приводит к добавлению переменной-члена в класс поддержки, к которой затем можно получить доступ, используя обычный код. Когда рассматриваемый элемент является частью DataTemplate, поле не создается.

Я могу понять, что DataTemplate делает это особым случаем, но может ли кто-нибудь объяснить мне основополагающий принцип? Также, каковы варианты получения доступа к объекту в .NET Code?

<dataControls:DataForm x:Name="CompanyDetail" CurrentItem="{Binding CurrentItem}" AutoGenerateFields="False">
    <dataControls:DataForm.EditTemplate>
        <DataTemplate>
            <StackPanel dataControls:DataField.IsFieldGroup="True">
                <dataControls:DataField Label="About">
                    <Border Height="150" Style="{StaticResource HtmlPlaceHolderBorderStyle}" Width="298" VerticalAlignment="Top">
                        <telerik:RadHtmlPlaceholder x:Name="uxAboutHtml" x:FieldModifier="Public" HtmlSource="{Binding About, Mode=TwoWay}"/>
                    </Border>
                </dataControls:DataField>
            </StackPanel>
        </DataTemplate>
    </dataControls:DataForm.EditTemplate>
</dataControls:DataForm>

1 Ответ

0 голосов
/ 26 ноября 2009

Вы можете использовать FrameworkElement.FindName ("objectName") в родительском объекте DataTemplate, например. var uxAboutHtml = CompanyDetail.FindName("uxAboutHtml"); чтобы получить ссылку на объект. Недостатком этого является то, что параметр, передаваемый в FindName, не обязательно будет строго типизирован с помощью атрибута «objectName» XAML x: Name.

Я изменил тактику и теперь ссылаюсь на базовый объект, к которому привязан элемент управления, что, вероятно, является лучшим путем.

var htmlContent = (CompanyViewModel)CompanyDetail.CurrentItem;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...