2010-08-27 19 views

回答

0

如果你指的是有約束力的,你可以設置UpdateSourceTrigger來明確,這意味着任何更改都不會得到保存,直到您明確告訴它更新

<TextBox Text="{Binding SomeValue, UpdateSourceTrigger=Explicit}" /> 
+0

謝謝rachel ...但我不想更改UpdateSourceTrigger的基本功能。看到我的UpdateSourceTrigger = PropertyChanged會是這樣的,但我想暫停更新一段時間來設置一些值,否則它會繼續調用屬性。有時這將非常耗時取決於標準。 – 2010-08-27 13:40:46

1

爲了INotifyPropertyChanged的工作,您需要引發PropertyChanged事件。因此,爲了使它不起作用,你只是不要提出這個事件。

這裏有一個小例子類:

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 
} 

在這個類中,每個屬性呼籲提高PropertyChanged事件常見的「NotifyPropertyChanged」的方法。還有一個額外的變量(在這裏,我使用了一個公共屬性,所以我可以將它綁定到一個複選框),它告訴是否引發該事件,如SomeProperty事件中所使用的。

這裏有一個小,見效快正骯髒的計劃,以行動證明這一點: 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> 

代碼隱藏

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 
    } 
} 
0

基於對Rachel的評論聽起來就像你可能想要有時設置私有財產支持成員一樣。您能否在您的基礎類中公開一個可以設置私有成員但不調用NotifyPropertyChaged的公共方法?

Public Class SomeClass 

... define property SomeProp and m_SomeProp 

Public Sub SetSomeProp(val as string) 
    m_SomePreop=val 
End Sub 

End Class 
相關問題