J'ai un problème avec la mise à jour de liaison lorsque la propriété de liaison est modifiée. Regardez le code ci-dessous. Je vais expliquer mon problème dans l'exemple suivant.Problème de mise à jour de liaison
public class SettingsControl : INotifyPropertyChanged
{
string _value = "test";
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
public SettingsControl() { }
public string Value
{
get { return _value; }
set { _value = value; OnPropertyChanged("Value"); }
}
}
<local:SettingsControl x:Key="Settings"></local:SettingsControl>
<TextBox Height="72" Text="{Binding Value, Mode=TwoWay, Source={StaticResource Settings} }"/>
<TextBlock Text="{Binding Value, Mode=OneWay, Source={StaticResource Settings} }" VerticalAlignment="Top" Width="135" />
<Button Height="100" Click="button1_Click" />
et code derrière:
private void button1_Click(object sender, RoutedEventArgs e)
{
SettingsControl settings = new SettingsControl();
settings.Value = "new value";
}
Maintenant, quand je change le texte dans TextBox
tout fonctionne très bien. Le nouveau texte est affiché en TextBlock
. Mais si je mets un nouveau texte dans le code settings.Value
rien ne se passe. Ce que je suppose à faire pour changer settings.Value
dans le code et affecter TextProperty
en TextBlock
.
EDIT: Solution ci-dessous pour ceux qui avaient comme moi le même problème:
SettingsControl settings = (SettingsControl)this.Resources["Settings"];
settings.Value = "new value";
Mais je ne peux pas atteindre 'Value' via' this.Value'. Je reçois une erreur "'binding.MainPage' ne contient pas de définition pour 'Value' ...". Merci pour la suggestion, je vais regarder plus près de la propriété de dépendance. – Maku
@Maku: Dans ce cas, vous devez obtenir la bonne référence au contrôle - ne pas créer une nouvelle instance, mais plutôt utiliser "this.mySettingsControl.Value" –
Ok, maintenant je l'ai! Je vous remercie! – Maku