Можно ли связать свойство name элемента? - PullRequest
0 голосов
/ 21 апреля 2010

У меня есть сетка с повторяющимися столбцами с одинаковым стилем, но разные имена, имя которых важно для меня в коде, поэтому я решил создать шаблон для повторения элемента и чтения имен из файла XML, но я узнал, что могу не используйте привязку для свойства name, пожалуйста, помогите мне sooooooooooooooooooooooooooon

вот часть моего кода:

<DataTemplate  x:Key="weekItemTemplate">
            <Gridx:Name="{Binding XPath=Container}" Style="{DynamicResource GridStyle}">
                <Grid.RowDefinitions>
                    <RowDefinition Height="0.9*"/>
                    <RowDefinition Height="0.1*"/>
                </Grid.RowDefinitions>
                <Rectangle x:Name="Rectangle"  Grid.Row="0" Margin="0,0,0,0.063"/>
                <TextBlock x:Name="Christian"  HorizontalAlignment="Left" Width="18.52" Grid.Row="1" Margin="1,0,0,0"><Run Text="08"/></TextBlock>
                <TextBlock x:Name="Hejri" Grid.Row="1"  HorizontalAlignment="Right" Width="9.773" Margin="0,0,0,0"><Run Text="۰۱"/></TextBlock>
                <TextBlock x:Name="Persian"  Margin="1,0,0,0" HorizontalAlignment="Left" Width="10"><Run Text="۰"/></TextBlock>
            </Grid>
        </DataTemplate>
    </Window.Resources>
    <Grid Margin="0,10,0,0">
        <Grid.DataContext>
            <XmlDataProvider x:Name="TeamData" Source="weekdays.xml" XPath="days/day" />
        </Grid.DataContext>
        <ListView x:Name="TeamsListBox" DockPanel.Dock="Left"
                     ItemsSource="{Binding}"
                     ItemTemplate="{StaticResource weekItemTemplate}"
                     IsSynchronizedWithCurrentItem="True"
                     Visibility="Visible" SelectionMode="Single" />

Ответы [ 3 ]

1 голос
/ 21 апреля 2010

Подумав об этом еще раз, вы можете определить новое присоединенное свойство для ваших столбцов и связать свои имена из файла XML с этим свойством. Затем в своем коде вы можете получить доступ к этому присоединенному свойству вместо свойства name. Это помогает?!

EDIT:
Я говорил о прикрепленном свойстве зависимости . Примерно так:

public static class ColumnProps
{
    public static readonly DependencyProperty MyCustomNameProperty =
        DependencyProperty.RegisterAttached(
            "MyCustomName",
            typeof(string),
            typeof(ColumnProps)
        );

    public static void SetMyCustomName(DependencyObject obj, string newValue)
    {
        obj.SetValue(MyCustomNameProperty, newValue);
    }

    public static string GetMyCustomName(DependencyObject obj)
    {
        return (string)obj.GetValue(MyCustomNameProperty);
    }
}

Затем вы можете установить это свойство в вашей сетке следующим образом:

<Grid xmlns:local="...">
    <Grid.ColumnDefinitions>
        <ColumnDefinition local:ColumnProps.MyCustomName="someName" Width="100"/>
        <!-- ... -->
    </Grid.ColumnDefinitions>
    <!-- ... -->
</Grid>

где xmlns:local должен ссылаться на сборку и пространство имен, где определен тип ColumnProps.

0 голосов
/ 21 апреля 2010

Кодовый код хочет, чтобы имена были статически разрешаемыми. Тем не менее, если имена действительно динамические, как вы могли бы написать код, который зависит от имен во всех случаях? Возможно, есть способ изменить дизайн так, чтобы вам не требовался прямой доступ к представлениям weekItem, а можно было работать с классом, моделирующим поведение представления weekItem. Например, если вам нужно зарегистрировать события или установить определенные свойства, вы можете вместо этого использовать привязку Command к классу WeekItemViewModel и предоставлять свойства, которые отражают то, что вы хотите, чтобы представление передавало.

Как только вы это сделаете, вы устранили свою зависимость от конкретных имен, что означает, что вы можете динамически загружать свои данные и создавать экземпляры этих классов WeekItemViewModel, которые изолируют вас от деталей того, как на самом деле выложено представление. Ваш код может сосредоточиться больше на том, как он хочет взаимодействовать, и меньше на том, как вы подключаете код позади своих конкретных визуальных элементов.

0 голосов
/ 21 апреля 2010

Невозможно привязать свойство name (и, следовательно, изменить его во время выполнения), поскольку оно используется в сгенерированном коде (BAML и сгенерированный код) в качестве имен полей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...