Bien sûr que vous le pouvez. Tout d'abord, votre objet settings doit implémenter l'interface INotifyPropertyChanged
. Cela ajoute essentiellement un événement, appelé chaque fois que vous appelez un accesseur de propriété. Ainsi, la liaison aux propriétés de non dépendance fonctionne dans les deux sens. Vous n'avez pas vraiment besoin de cette interface. Mais si vous voulez que vos changements après le premier ensemble (où toutes les propriétés sont lues) soient reflétés dans l'interface utilisateur, vous avez besoin de cette interface.
i utilisent généralement une classe de base pour cette
public class PropertyChangedNotifier : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged
{
add { mPropertyChanged += value; }
remove { mPropertyChanged -= value; }
}
protected virtual void RaisePropertyChanged(string aPropertyName)
{
PropertyChangedEventHandler handler = mPropertyChanged;
if (handler != null)
{
var e = new PropertyChangedEventArgs(aPropertyName);
handler(this, e);
}
}
private PropertyChangedEventHandler mPropertyChanged;
}
Vos paramètres doivent maintenant être dérivés de cette classe.
class MySettings : PropertyChangedNotifier
{
public string UserName
{
get{return mUserName;}
set{mUserName=value; RaisePropertyChanged("UserName");}
}
}
Maintenant, pour l'interface, DataBinding est toujours liée à l'ensemble DataContext
.
<Window
x:Class="MyApp.MainWindow">
<StackPanel>
<TextBox Text="{Binding UserName}"/>
</StackPanel>
</Window>
La zone de texte tente d'obtenir sa valeur à partir du setacontext défini actuellement à partir de la propriété "UserName". Maintenant, pour définir le DataContext, nous pourrions le faire dans le code mainwindow derrière.
public MainWindow()
{
InitializeComponent();
DataContext = ReadMyUserSettings();
}
Si vous modifiez votre Datacontext à tout moment, l'interface utilisateur se met automatiquement à jour. Et vos modifications dans la zone de texte seront réécrites dans vos paramètres. Cela peut également être amélioré en ajoutant une sorte d'annulation et enregistrer le flux de travail, de sorte que les paramètres ne sont pas modifiés si l'utilisateur clique sur annuler. Voir IEditableObject
et BindingGroup
pour cela.
Espérons que cela vous donne une idée approximative, comment cela fonctionne.
les liaisons de données existaient bien avant wpf/xaml - * Personnellement * J'aurais besoin de plus de raisons que les "paramètres" pour se déplacer entre les piles ... –