Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > WPF и Silverlight > Проблема повторяющегося кода в разметке XAML


Автор: Stas123 29.7.2011, 17:20
у меня приложение работает с несколькими объектами, которые все имеют обшего предка.
эти объекты в процессе работы меняют своё состояние, я это вывожу на окно.
Но получится очень много дублирующего кода.
Код.
Если состояние изменилось, обновить инфу на экране
Код

private void OnStrategyPropertyChangedB(object sender, PropertyChangedEventArgs e)
        {
            Strategy strategy = (Strategy) sender;
            this.GuiAsync(() =>
                          {
                           this.B_Cons_Status.Content = strategy.ProcessState;
                           this.B_Cons_Position.Content = strategy.PositionManager.Position;
                           this.B_Cons_ID.Content = strategy.Id;
                          });
        }
        
        private void OnStrategyPropertyChangedS(object sender, PropertyChangedEventArgs e)
        {
            Strategy strategy = (Strategy) sender;
            this.GuiAsync(() =>
                          {
                           this.S_Cons_Status.Content = strategy.ProcessState;
                           this.S_Cons_Position.Content = strategy.PositionManager.Position;
                           this.S_Cons_ID.Content = strategy.Id;
                          });
        }

Отображение на экране
Код

 <Grid Margin="0,20,0,0">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="120" />
                            <ColumnDefinition Width="120" />
                            <ColumnDefinition Width="120" />
                            <ColumnDefinition Width="120" />
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                        </Grid.RowDefinitions>
                        <Label Content="Статус:" Grid.Row="0" Grid.Column="1" />
                        <Label x:Name="B_Cons_Status" Grid.Row="0" Grid.Column="2" />
                        <Label Content="Позиция:"  Grid.Row="3" Grid.Column="1" />
                        <Label x:Name="B_Cons_Position"  Grid.Row="3" Grid.Column="2" />
                        <Label Content="ID:"  Grid.Row="5" Grid.Column="1" />
                        <Label x:Name="B_Cons_ID"  Grid.Row="5" Grid.Column="2" />
                    </Grid>

                    <Grid Margin="0,20,0,0">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="120" />
                            <ColumnDefinition Width="120" />
                            <ColumnDefinition Width="120" />
                            <ColumnDefinition Width="120" />
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                        </Grid.RowDefinitions>
                        <Label Content="Статус:" Grid.Row="0" Grid.Column="1" />
                        <Label x:Name="S_Cons_Status" Grid.Row="0" Grid.Column="2" />
                        <Label Content="Позиция:"  Grid.Row="3" Grid.Column="1" />
                        <Label x:Name="S_Cons_Position"  Grid.Row="3" Grid.Column="2" />
                        <Label Content="ID:"  Grid.Row="5" Grid.Column="1" />
                        <Label x:Name="S_Cons_ID"  Grid.Row="5" Grid.Column="2" />
                    </Grid>

Как видите, код почти одинаковый, кроме название Label, для отображения информации.
И обекты в методы, предназначенный для обработки событий одного типа.
Можно ли как-то избавится от такого дублирования кода?
Мне нужно ещё 4 таких же блока, и это будет совсем некрасиво и грязно.

Автор: KelTron 29.7.2011, 17:48
Ну создай UserControl...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)