2011-05-12 5 views
5

J'ai un modèle de vue qui hérite d'une classe de base qui possède une propriété appelée IsReadOnly. Dans ce modèle de vue, j'ai une propriété appelée Client et je lie les propriétés de l'objet client aux contrôles de ma vue.Propriétés et sous-propriétés de liaison MVVM

Cependant, je veux aussi pouvoir lier le IsReadOnly à chaque contrôle sur ma vue aussi.

<TextBox x:Name="FirstNameTextBox" Grid.Column="1" Margin="2,2,0,2" Grid.Row="2" TextWrapping="Wrap" HorizontalAlignment="Left" Width="200" 
         Text="{Binding FirstName, Mode=TwoWay}" IsReadOnly="{Binding MyViewModel.IsReadOnly}"/> 

Comment puis-je utiliser ces deux propriétés? ici est ma structure

MyViewModelBase public class { isReadonly bool publique {get; ensemble;}}

MyViewModel public class { publique Client Client {get; ensemble; } }

public class Client { public string FamilyName {get; ensemble; } }

Vive toute aide

Répondre

0

Je suppose que votre MyViewModel hérite de MyViewModelBase.

public class MyViewModelBase { public bool IsReadonly { get;set;} } 

public class MyViewModel : MyViewModelBase { public Customer Customer { get; set; } } 

public class Customer { public string FamilyName { get; set; } } 

je suppose aussi que votre point de vue DataContext est une instance de MyViewModel, si me laisse pas savoir :) votre liant devrait être comme suit:

<TextBox x:Name="FirstNameTextBox" Grid.Column="1" Margin="2,2,0,2" Grid.Row="2" TextWrapping="Wrap" HorizontalAlignment="Left" Width="200" 
     Text="{Binding Customer.FamilyName, Mode=TwoWay}" IsReadOnly="{Binding IsReadOnly}"/> 

EDIT: si le DataContext de votre TextBox est la propriété du client, vous devez utiliser RelativeSource dans votre liaison à IsReadOnly

+0

merci, cela a résolu mon problème. Bon à savoir que vous pouvez faire la propriété de la traversée. :) – BBurke

7

Propriété traversant travaux avec reliure aussi, donc vous pouvez faire ce qui suit pour se lier à la propriété IsReadOnly de l'objet de base:

public class MyViewModel { 
    public Customer Customer { get; set; } 
} 

public class Customer : Entity { 
} 

public class Entity { 
    public bool IsReadonly { get;set;} 
} 

<Button IsEnabled="{Binding Customer.IsReadonly}" /> 

Pour l'exemple ci-dessus, Je suppose que votre vue est liée à une instance de "MyViewModel" et que vous avez probablement déjà modifié la notification de propriété sur vos propriétés.

+0

Salut Hadi, je vois ce que vous dites. Donc, je lie mon client à DataContext d'une grille et à l'intérieur de la grille j'ai TextBoxes qui sont liés aux propriétés du client. Mais je veux aussi lier le IsEditable, IsReadOnly à la propriété viewModel IsReadOnly. C'est possible? – BBurke

Questions connexes