What's the difference between a Trigger and a DataTrigger?
They seem the same. Is there a significant difference? I think I am missing something.
Solution 1:
A regular Trigger
only responds to dependency properties.
A DataTrigger
can be triggered by any .NET property (by setting its Binding
property). However, its setters can still target only dependency properties.
Solution 2:
Another difference is that a DataTrigger
can be bound to another control, a StaticResource, etc etc.
<Style TargetType="TextBox">
<Style.Triggers>
<DataTrigger
Binding="{Binding SomeProperty,
ElementName=someOtherControl"
Value="Derp">
<!-- etc -->
You can only examine the instance on which the style is set when using a Trigger
. For example, a Trigger
applied to a Button can inspect the value of IsPressed
, but it would not be able to inspect the (for example) Text
value of a TextBox
on the same form if you wished to disable the Button
if the TextBox
was empty.
Solution 3:
The short answer (as I'm about to sleep)- A trigger works on dependency properties (typically GUI properties) whereas data triggers can be triggered by any .NET property (typically a property in a ViewModel that implements INotifyPropertyChanged).