2017-10-03 13 views
0

J'essaie de créer une application MVVM sans utiliser de structure MVVM. J'ai défini ma fenêtre principale et viewmodel, un appcontroller, un couple de vues (UserControl comme généralement conseillé) qui sont affichés dans un panneau mainwindow, partageant le même aspect & sentir en utilisant la composition avec un autre usercontrol qui contient le style commun, donc loin si bon.Propriété de dépendance de partage entre la commande utilisateur

Mon problème est: Je voudrais que toutes mes vues "objets" partagent quelques propriétés de dépendance (voir le titre, le contexte d'aide, etc ...).

Le problème est: vous ne pouvez pas mettre le même nom DP à plusieurs objets, vous ne pouvez pas modifier en mode de conception quelque chose qui hérite de UserControl (VS concepteur semble reconnaître que la fenêtre, les objets UserControl et Page)

Je pense que quelque chose me manque mais que je ne peux pas mettre le doigt dessus. Pouvez-vous m'aider ?

Répondre

0

Enfin réussi à traverser.

  • Déclarer un contrôle héritant de usercontrol (fichier cs seulement, pas XAML)

    public class BaseView : UserControl 
    { 
    
    
        public string Title 
        { 
         get { return (string)GetValue(TitleProperty); } 
         set { SetValue(TitleProperty, value); } 
        } 
    
        // Using a DependencyProperty as the backing store for Title. This enables animation, styling, binding, etc... 
        public static readonly DependencyProperty TitleProperty = 
         DependencyProperty.Register("Title", typeof(string), typeof(BaseView), new PropertyMetadata("New view")); 
    
        public BaseView() 
        { 
    
        } 
    } 
    
  • Déclare un style dans les ressources mondiales pour ce contrôle:

    <Style TargetType="{x:Type views:BaseView}"> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="{x:Type views:BaseView}"> 
           <Border CornerRadius="5" BorderThickness="2"> 
            <Grid Name="RootGrid"> 
             <ContentPresenter></ContentPresenter> 
            </Grid> 
           </Border> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
    </Style> 
    
  • Une fois que vous pouvez sous-classe votre contrôle BaseView dans un autre contrôle:

    <local:BaseView x:Class="MyNS.NiceView" 
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
          xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
          xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
          mc:Ignorable="d" 
          Title="My Software" 
          d:DesignHeight="300" d:DesignWidth="300"> 
        <Grid> 
        <StackPanel> 
         <Button>HAAAAhahahaha</Button> 
         <Label>213456789</Label> 
        </StackPanel>   
    </Grid> 
    </local:BaseView>