Q:

MVVM: Use DataGrid CheckBox IsChecked property to control the neighboring TextBox's TextDecorations

I need to accomplish the following without breaking MVVM (no code-behind/events).  I have a DataGrid with a CheckBox column and a TextBox column.  If the checkbox is checked, I'd like to change the TextBox's TextDecorations property to Strikethrough.  While the compiler doesn't hate my XAML, it doesn't work.  My XAML for the DataGridTextBoxColumn is as follows:
<DataGridTextColumn Header="Item Description" Binding="{Binding Path=ItemDescription, Mode=TwoWay}" Width="175">
                        <DataGridTextColumn.ElementStyle>
                            <Style TargetType="TextBlock">
                                <Setter Property="TextWrapping" Value="Wrap"/>
                                <Setter Property="TextAlignment" Value="Center" />
                                <Style.Triggers>
                                    <DataTrigger Binding="{Binding ElementName=complete, Path=IsChecked}" Value="True">
                                        <Setter Property="TextDecorations" Value="Strikethrough"/>
                                    </DataTrigger>
                                </Style.Triggers>
                            </Style>    
                        </DataGridTextColumn.ElementStyle>
                    </DataGridTextColumn>

A:

Because of for each element in ItemsSource DataGrid creates its own TextBlock and CheckBox during runtime you can't have binding to this elements by names. Instead you should bind both CheckBox's Value and TextBlock's Style Setters to your Model. For example you have Model and ViewModel like this:
Model:
public class SomeModel : INotifyPropertyChanged
{
    private string textField;
    private bool boolField;
    public event PropertyChangedEventHandler PropertyChanged;

    public string TextField
    {
        get { return textField; }
        set
        {
            if (value == textField) return;
            textField = value;
            OnPropertyChanged();
        }
    }

    public bool BoolField
    {
        get { return boolField; }
        set
        {
            if (value.Equals(boolField)) return;
            boolField = value;
            OnPropertyChanged();
        }
    }

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        var handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
}

ViewModel:
public class MainViewModel : INotifyPropertyChanged
{
    private ObservableCollection<SomeModel> models;

    public ObservableCollection<SomeModel> Models
    {
        get { return models; }
        set
        {
            if (Equals(value, models)) return;
            models = value;
            OnPropertyChanged();
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    public MainViewModel()
    {
        Models = new ObservableCollection<SomeModel>();
    }

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        var handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
}

So now you can bind BoolField of your Model to the CheckBox's Value and TextBlock's Style Setters in View:
MainView.cs:
public partial class MainView : Window
{
    public MainView()
    {

        InitializeComponent();
        var mv = new MainViewModel
        {
            Models = { new SomeModel { BoolField = true, TextField = "One" }, new SomeModel { TextField = "Two" } },
        };
        DataContext = mv;

    }
}

MainView.xaml:
<Window x:Class="WpfDataGridCols.MainView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainView" Height="350" Width="525">
<Grid>
    <DataGrid ItemsSource="{Binding Models}" AutoGenerateColumns="False">
        <DataGrid.Columns>
            <DataGridTextColumn Binding="{Binding TextField}">
                <DataGridTextColumn.ElementStyle>
                    <Style TargetType="TextBlock">
                        <Setter Property="TextWrapping" Value="Wrap"/>
                        <Setter Property="TextAlignment" Value="Center" />
                        <Style.Triggers>
                            <!--Pay attention on this:-->
                            <DataTrigger Binding="{Binding BoolField}" Value="True">
                                <Setter Property="TextDecorations" Value="Strikethrough"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </DataGridTextColumn.ElementStyle>
            </DataGridTextColumn>
            <DataGridCheckBoxColumn Binding="{Binding BoolField}"/>
        </DataGrid.Columns>
    </DataGrid>
</Grid>

