views:

31

answers:

1

I want to enable / disable a DataGridTextColumn based on whether or not the SelectedValue of its neighboring DataGridComboBoxColumn == 'Other'

I can make this work in a ListBox as below, but this won't work in my DataGrid environment as the DataGridComboBox column doesn't have a name property.

<ListBox Grid.Row="1" Grid.Column="1" ItemsSource="{Binding Source={StaticResource CustomData}}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <ComboBox Name="operatorComboBox" SelectedValue="{Binding OperatorId}" ItemsSource="{Binding Source={StaticResource Operator}}" SelectedValuePath="Id" DisplayMemberPath="Name"></ComboBox>
                <TextBox Text="{Binding Name}"  Visibility="{Binding Path=SelectedValue, ElementName=operatorComboBox, Converter={StaticResource intToVis}}"></TextBox>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

So can this be done with a DataGrid?

(I know I've changed visibility in the ListBox example, but its not a quantum leap to change that to enabled. (Obviously hiding an entire column would be a bad thing in a proper DataGrid)

this question is fairly similar to what I'm asking, I just can't seam to mangle the solution into what I'm after

+1  A: 

Hi keith,

The easiest way I can think of solving this problem is actually to create a DataGridTemplateColumn instead of a DataGridTextBoxColumn then create a textbox inside the template. In order to disable / enable the textbox, bind the IsEnabled property to the underlying OperatorId property. You will also have to write a ValueConverter that checks whether the OperatorId value == 'Other' and returns that value.

Leigh Shayler