Рефакторинг пользовательского контроля - могу ли я сделать лучше, чем это? - PullRequest
1 голос
/ 11 сентября 2011

Я хотел бы использовать пользовательский элемент управления ниже для трех разных презентаций. Поскольку объекты, которые находятся в переданном контексте данных, имеют общие интерфейсы, только две вещи, которые будут отличаться от каждой презентации, будут:

  1. ресурс изображения ("imgDepartment")
  2. Элемент управления FilterPanel (EmployeeFilterPanel)

Как бы то ни было, только из-за этих двух элементов мне нужны три отдельные версии этого пользователя с в основном дублированным кодом.

Могу ли я это сделать? Как?

Приветствия
Berryl

    <DockPanel LastChildFill="True" >
    <uc:ListSubjectHeader DockPanel.Dock="Top" 
        Subject="{Binding PresentationSubject}" 
        AddNewItemCommand="{Binding AddCommand}" 
        ImageSource="{StaticResource imgDepartment}" 
                          />
    <local:EmployeeFilterPanel  DockPanel.Dock="Top" DataContext="{Binding MasterVm}"/>

    <Grid Margin="0, 5, 0, 0">
        <common:MasterListingWorkspacesControl />
    </Grid>

</DockPanel>

enter image description here

Обновление

Решил часть изображения, установив стиль и добавив свойство PresentationImageUri в мою ViewModel, как показано ниже:

<Style x:Key="ListSubjectHeaderStyle" TargetType="{x:Type uc:ListSubjectHeader}">
    <Setter Property="DockPanel.Dock" Value="Top" />
    <Setter Property="Subject" Value="{Binding PresentationSubject}" />
    <Setter Property="AddNewItemCommand" Value="{Binding AddCommand}" />
    <Setter Property="ImageSource" Value="{Binding PresentationImageUri}" />
</Style>

Все еще не уверен, что делать с этим типом FilterPanel.

Ответы [ 2 ]

0 голосов
/ 22 сентября 2011

Я ненавижу отвечать на свои вопросы, но, возможно, это поможет кому-то еще.Я использовал комбинацию DataTemplates, конвертер ресурсов и строковый ключ в моей модели представления.Более подробная информация и код здесь

B

0 голосов
/ 11 сентября 2011

Почему бы не установить ImageSource & DataContext через codebehind?

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