Comment désactiver toutes les propriétés ou certains des propriétés PropertyChanged événement pendant un certain temps lorsque nous utilisons INotifypropertyChanged?comment désactiver toutes ou certaines propriétés événement PropertyChanged dans WPF?
Répondre
Si vous faites référence à une liaison, vous pouvez définir le UpdateSourceTrigger Explicite, ce qui signifie que tout changement ne seront pas enregistrés tant que vous dites explicitement mettre à jour
<TextBox Text="{Binding SomeValue, UpdateSourceTrigger=Explicit}" />
Pour INotifyPropertyChanged travailler, vous devez augmenter l'événement PropertyChanged. Par conséquent, pour que cela ne fonctionne pas, vous ne devez pas déclencher cet événement.
Voici une petite classe exemple:
public class NPCExample : INotifyPropertyChanged
{
public NPCExample()
{
}
private string mSomeProperty = "Set Property";
public string SomeProperty
{
get { return mSomeProperty; }
set
{
mSomeProperty = value;
if (mUseNotifyPropertyChanged)
NotifyPropertyChanged("SomeProperty");
}
}
private Boolean mUseNotifyPropertyChanged = true;
public Boolean UseNotifyPropertyChanged
{
get { return mUseNotifyPropertyChanged; }
set
{
mUseNotifyPropertyChanged = value;
NotifyPropertyChanged("UseNotifyPropertyChanged");
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
Dans cette classe, chaque propriété appelle la méthode commune « NotifyPropertyChanged » pour élever l'événement PropertyChanged. Une variable supplémentaire est définie (ici, j'ai utilisé une propriété publique pour pouvoir la lier à une case à cocher) qui indique si l'événement doit ou non être déclenché, comme dans l'événement SomeProperty.
Voici un petit programme rapide n-sale pour montrer en action: XAML
<Window x:Class="MyNamespace.SelectiveNotifyPropertyChanged"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="SelectiveNotifyPropertyChanged" Height="300" Width="300">
<StackPanel>
<TextBlock Text="{Binding SomeProperty}" />
<CheckBox x:Name="chkINPCEnabled"
Content="Enable INotifyPropertyChanged"
IsChecked="{Binding UseNotifyPropertyChanged}"></CheckBox>
<StackPanel Orientation="Horizontal">
<TextBox x:Name="txtIsProperty"
Text="Set Property" />
<Button x:Name="btnSetProperty"
Content="Set Property" />
</StackPanel>
</StackPanel>
</Window>
code Derrière
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
namespace MyNamespace
{
/// <summary>
/// Interaction logic for SelectiveNotifyPropertyChanged.xaml
/// </summary>
public partial class SelectiveNotifyPropertyChanged : Window
{
public SelectiveNotifyPropertyChanged()
{
InitializeComponent();
NPCExample example = new NPCExample();
this.DataContext = example;
btnSetProperty.Click +=
(s, e) => example.SomeProperty = txtIsProperty.Text;
}
}
public class NPCExample : INotifyPropertyChanged
{
public NPCExample()
{
}
private string mSomeProperty = "Set Property";
public string SomeProperty
{
get { return mSomeProperty; }
set
{
mSomeProperty = value;
if (mUseNotifyPropertyChanged)
NotifyPropertyChanged("SomeProperty");
}
}
private Boolean mUseNotifyPropertyChanged = true;
public Boolean UseNotifyPropertyChanged
{
get { return mUseNotifyPropertyChanged; }
set
{
mUseNotifyPropertyChanged = value;
NotifyPropertyChanged("UseNotifyPropertyChanged");
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
#endregion
}
}
Sur la base de votre commentaire à Rachel, il semble comme vous voudrez peut-être définir le membre de soutien de la propriété privée parfois. Pourriez-vous exposer une méthode publique dans votre classe sous-jacente qui définirait le membre privé sans appeler NotifyPropertyChaged?
Public Class SomeClass
... define property SomeProp and m_SomeProp
Public Sub SetSomeProp(val as string)
m_SomePreop=val
End Sub
End Class
- 1. C#/WPF: PropertyChanged pour toutes les propriétés dans ViewModel?
- 2. Firing événement PropertyChanged dans un type complexe, niché dans WPF
- 3. PropertyChanged pour toutes les propriétés: Message = propriété introuvable
- 4. WPF événements PropertyChanged excessives
- 5. Événement PropertyChanged, déclencher lors OnClick?
- 6. DataGrid WPF: désactiver l'édition dans certaines lignes
- 7. Quand dois-je utiliser les fenêtres automatiques et les propriétés avec un événement propertychanged?
- 8. Comment sérialiser seulement certaines propriétés dans .Net?
- 9. Notification PropertyChanged pour les propriétés calculées
- 10. Désactiver ScriptManager sur certaines pages
- 11. menu contextuel Désactiver sur certaines cellules DatGrid WPF
- 12. Toutes les propriétés de contrôle WPF sont des propriétés de dépendance. Vrai ou faux?
- 13. Comment obtenir ou tuer toutes les instances de certaines classes?
- 14. Comment désactiver les raccourcis dans WPF TextBox
- 15. Comment désactiver certaines entités en fonction de quelques propriétés dans NHibernate Search?
- 16. ObservableCollection et Item PropertyChanged
- 17. Comment désactiver/lire certaines cases d'une MultiCheckbox?
- 18. Quand WPF s'abonne-t-il à l'événement PropertyChanged?
- 19. Comment améliorer les événements PropertyChanged?
- 20. WPF événement: BitmapImage PropertyChanged: « L'appel de cette discussion ne peut pas accéder »
- 21. System.ExecutionEngineException PropertyChanged
- 22. JFace question: Désactiver certaines entrées dans ListSelectionDialog?
- 23. Événement WPF Listview SelectionChanged
- 24. Problème avec UpdateSourceTrigger = PropertyChanged et StringFormat dans WPF
- 25. événement onclick désactiver jquery
- 26. Exécuter certaines ou toutes les sections d'un fichier ant
- 27. Flex JSON: ignorer certaines propriétés?
- 28. Masquer ou désactiver le texte de mouvement d'entrée dans wpf
- 29. Comment désactiver le menu contextuel dans WPF?
- 30. Comment déclencher un événement attaché dans wpf?
Merci Rachel ... mais je ne veux pas changer la fonctionnalité de base du UpdateSourceTrigger. voir mon UpdateSourceTrigger = PropertyChanged sera comme ceci mais je veux arrêter la mise à jour pendant un certain temps pour définir la valeur certaine, sinon il continuera à appeler la propriété. Parfois, cela prendra beaucoup de temps dépend des critères. –