如何在我們使用INotifypropertyChanged時禁用所有屬性或PropertyChanged事件的某些時間?如何禁用WPF中的所有或部分屬性PropertyChanged事件?
0
A
回答
0
如果你指的是有約束力的,你可以設置UpdateSourceTrigger來明確,這意味着任何更改都不會得到保存,直到您明確告訴它更新
<TextBox Text="{Binding SomeValue, UpdateSourceTrigger=Explicit}" />
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
相關問題
- 1. ViewModel屬性PropertyChanged事件
- 2. WPF - ObservableCollection PropertyChanged事件?
- 3. 的PropertyChanged所有屬性:消息=找不到屬性
- 4. 如何檢查其屬性的PropertyChanged事件改變
- 5. WPF何時訂閱PropertyChanged事件?
- 6. 如何爲子屬性提高PropertyChanged事件?
- 7. 如何禁用所有setTimeout事件?
- 8. WPF綁定庫的值(無PropertyChanged事件)
- 9. WPF中的元素沒有註冊到事件:PropertyChanged
- 10. PropertyChanged事件沒有觸發
- 11. 所有WPF控件屬性都是依賴項屬性。對或錯?
- 12. PropertyChanged ObservableCollection中ViewModel的事件
- 13. 如何啓用或禁用某個元素特定部分的指針事件?
- 14. 何時需要使用自動屬性以及何時使用propertychanged事件?
- 15. 如何禁用面板內部或複合內的所有小部件?
- 16. ViewModels PropertyChanged事件後的屬性始終爲空
- 17. 通知WPF中具有特定屬性的所有子控件
- 18. WPF:如何向所有子控件繼承屬性值?
- 19. 禁用WPF中的所有文本框
- 20. 如何從INotifyPropertyChanged的PropertyChanged事件
- 21. 如何在網站中禁用小部件的所有頁面?
- 22. TYPO3:如何訪問部分或部分中的對象的屬性?
- 23. WPF事件:BitmapImage的的PropertyChanged:「調用線程不能訪問」
- 24. 由模型事件觸發的ViewModel中的WPF MVVM PropertyChanged通知
- 25. 更改(或集中)WPF窗口上所有控件的屬性值
- 26. 如何分辨Automapper,檢查所有源屬性有目的性
- 27. Flex - 如何禁用/啓用一組組件(或更改屬性)
- 28. 如何禁用部分的uisegment控件?
- 29. 如何禁用ViewGroup的所有孩子的所有觸摸事件?
- 30. 如何禁用vue.js組件屬性
謝謝rachel ...但我不想更改UpdateSourceTrigger的基本功能。看到我的UpdateSourceTrigger = PropertyChanged會是這樣的,但我想暫停更新一段時間來設置一些值,否則它會繼續調用屬性。有時這將非常耗時取決於標準。 – 2010-08-27 13:40:46