2010-03-02 7 views
1

Existe-t-il un moyen de marquer l'intégralité de DataGrid comme une liaison unidirectionnelle?WPF: liaison unidirectionnelle sur l'intégralité de DataGrid

+1

Pourquoi voulez-vous faire cela? –

+0

Pour le faire se comporter d'une manière complètement non-standard, bien sûr! C'est la clé d'une bonne convivialité, non? ;) –

+1

Parce que je suis lié à un ensemble de propriétés en lecture seule et je suis fatigué d'écrire ", Mode = OneWay". –

Répondre

1

Vous pouvez créer une nouvelle classe telle que OneWayExtension héritant de la liaison.

public class OneWayExtension : Binding 
{ 
    public OneWayExtension() 
     : base() 
    { 
     Initialize(); 
    } 

    public OneWayExtension(string path) 
     : base(path) 
    { 
     Initialize(); 
    } 

    private void Initialize() 
    { 
     this.Source = YourSourceOrMakeThisAParameter; 
     this.Mode = BindingMode.OneWay; 
    } 
} 

Vous pouvez appeler cela par

{local:OneWay PathOfData} 
+0

Intéressant. Il semble que je pourrais faire beaucoup de choses cool en utilisant cela. –

+1

Je trouve que c'est un excellent moyen de définir les paramètres de l'utilisateur et de l'application. Un "problème" est l'éditeur XAML se plaindre qu'il ne peut pas trouver un constructeur avec un argument. Cela a été corrigé par MS comme étant non corrigé. Vous pouvez "contourner" ce problème en déplaçant la classe vers un projet distinct dans la solution, ce qui ne fonctionne pas pour les paramètres, mais dans votre cas, cela pourrait fonctionner. Ou si cela ne vous dérange pas l'avertissement (compile encore évidemment), ignorez-le;) –

+0

C'est le genre de réponse manifestement évident que je pourrais m'inquiéter de ce problème pendant six mois et ne jamais trouver. –

1

Je sais que cela a déjà répondu, mais ne peut pas vous venez de définir la liaison Mode sur ItemsSource propriété du DataGrid à OneWay?