A lot of examples (even from MS) use a dispatcher to update data-bound properties and a bunch of different answers could be found. Does an 'official' statement exist? Currently, I always use a dispatcher and I would only change this if I can be sure that this is an official feature and it will still work on future .Net versions.
Is a dispatcher needed to change data-bound properties in WPF .Net Core 3 or newer?
287 views Asked by Tom1000 AtThere are 2 answers
Peter Duniho
On
Is a dispatcher needed to change data-bound properties in WPF .Net Core 3 or newer?
No. It's not needed in earlier versions either, nor on .NET Framework versions.
WPF has always automatically marshalled property-change updates to the UI thread as needed, for any properties bound to a dependency property via the normal data binding mechanisms (e.g. {Binding} markup in XAML).
I don't know that this is documented explicitly. I looked around on the Microsoft Docs site, on the most likely topics, such as the data-binding and INotifyPropertyChanged pages for WPF, but didn't see anything. However, it's a well-known feature of WPF, and is mentioned in this 2014 article from MSDN: MVVM : Multithreading and Dispatching in MVVM Applications:
…WPF automatically dispatches the PropertyChanged event to the main thread…
See also e.g. Task parallel library INotifyPropertyChanged NOT throwing an exception?
Note that this is only for simple single-value properties. Collections are a different matter, though WPF since 4.5 has also included some support for automatic marshaling of collection-changed events. See e.g. How do I update an ObservableCollection via a worker thread?
Related Questions in .NET
- Does compiler optimize operation on const variable and literal const number?
- What is the point of definnig Asp.net Intrinsic Objects In different places and what is the different betwen them?
- Deleting Orphans with Fluent NHibernate
- IOrderedEnumerable to vb.net IOrderedEnumerable Conversion
- What is this namespace ITypeOfObjectsBoundToListBox ? Couldn't find it
- .net rest service with JSON string and consumed with java client
- What is best way to check if any of the property of object is null or empty?
- Telerik's WPF RadColorPicker NoColorText property not working
- Possible consequences of duplicate ProgId for different classes
- How are multiple requests to Task.Run handled from a resource management standpoint?
- Optimizing C++ call from C#
- Make a per-web-application object available to Web API and SignalR controllers
- System.ComponentModel.DataAnnotations.Schema namespace conflict
- LINQ Except/Distinct based on few columns only, to not add duplicates
- Not displaying content by its URL string - absolute urls
Related Questions in WPF
- WPF MessageBox Cancel checkbox check
- WPF multiple control property simultaneous changes
- ObservableCollection.CollectionChanged does not select the correct DataTemplate on ToolBar
- Telerik's WPF RadColorPicker NoColorText property not working
- How to automate UI interaction during acceptance test run
- Binding to "this.property" object in VisualStateMenager
- ContextMenu Closes Immediately
- Update ObservableCollection where the items are received from another List
- change content button with trigger
- WPF - How to highlight a combobox border when focused
- Wpf No Highlight on ListBoxItem for Touch Devices
- WPF WebBrowser how best to get Tag trees
- Make a class suitable for Property Change Notification
- WPF Comparing two datatables to find matching values
- how to create folder and file with datetime in wpf application
Related Questions in MULTITHREADING
- new thread blocks main thread
- WPF MessageBox Cancel checkbox check
- How to avoid concurrent access to a resource?
- run oncomplete event in async
- Threading Segfault when reading members
- Function timeouts in C and thread
- How are multiple requests to Task.Run handled from a resource management standpoint?
- Acumatica perfomance with threads
- Wait and Notify in Java threads for a given interval
- Different behavior of async with Visual Studio 2013(Windows8.1) and GCC 4.9(Ubuntu14.10)
- How to return blocking queue to the right object?
- background thread using Task.Run
- deletion and cleanup of worker thread in Qt crashes
- Pipeline-like operation using TChan
- implementing in app purchase on android
Related Questions in DISPATCHER
- Does Dispatcher.BeginInvoke queues the call if it is called from the same thread?
- How WPF Multi threading works?
- MVVM Light Dispatcher helper design time error
- Using framework event dispatcher to raise domain event
- XAML to XPS memory leak
- DispatcherTimer and real time WP7
- Application dispatcher invoke freezes the application
- WPF ICommand CanExecute(): RaiseCanExecuteChanged() or automatic handling via DispatchTimer?
- Need help in scala regex - Not able to fetch matched string by name in Scala regex
- Timer.Elapsed and BeginInvoke still lag GUI
- Dispatcher.BeginInvoke exception in an array loop
- Lambda vs. (Action)delegate in Dispatcher.BeginInvoke
- Dispatcher.Invoke() with parameter always throws an InvalidOperationException
- Silex 2 addListener trigger error
- WPF Dispatcher VS Winform UI Thread Control Invoke
Related Questions in DATABOUND-CONTROLS
- Adding Dynamic Image Overlay to Databound Gridview
- Databound dropdownlist with a million item
- Asp.Net Databound and Sessions Conditional Logic
- Databound repeater nested in GridView will not update
- ASP.NET - Ideal Control to Display a Pivot Table
- Which page is my record going to be on?
- Why DataItem in my custom template databound control is null in ItemCommand event?
- Is a dispatcher needed to change data-bound properties in WPF .Net Core 3 or newer?
- WPF background worker need a dispatcher for bound data
- Group data in columns (instead of rows) in an HTML table using data bound control?
- DataGridView cannot add rows as "control is data-bound" after XML load
- unbound controls table using ADO.NET
- Accessing ComboBox.Items with Contains method for DataBound ComboBox
- Has ASP.NET any databound control which has fixed header feature?
- WHY is - 'GENERATE INSERT UPDATE AND SELECT STATEMENT' greyed out?
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
I don't believe an official statement exists. However, it generally seems to depend on the type of update that you're doing. If you're updating a normal property on a VM, then it doesn't matter, if you're updating a dependency property then it does. If you're adding or removing from a list then it doesn't matter, if you're adding or removing from an observable collection then it does.
Generally, I'd say avoid dependency properties in VM's and use INotifyPropertyChanged, leave them to your UserControls. Then you don't have to worry about them. Add a method like DoPropertyChanged(propertyname) to your base class for your VM's so that you can then create a property snippet like VB.net
C#
and quickly add properties to your VM's.
We also make heavy use of index properties and have a snippet for that too. VB
C#