WPF binding based on comparison

data-binding, wpf, xaml

Solution

Why not expose additional Properties in SomeClass that performs the comparison logic?

ex:

public bool ActionOneEnabled
{
    get { return Status != SomeEnum.Two; }
}

Then you can easily bind the Button's IsEnabled to the appropriate Property.

Don't forget to include an OnPropertyChanged("ActionOneEnabled") in your setter for Status - so that when your Status changes your Properties based on Status are re-evaluated.

Problem

There is a relatively simple thing I'm trying to achieve but I'm unsure how to do it. Basically, I have a CLR class as follows: ``` class SomeClass { public SomeEnum Status; } public enum SomeEnum { One, Two, Three }; ``` I've got a DataGrid that I'm binding an `ObservableCollection<SomeClass>` programmatically through the code-behind. In this DataGrid I have a `DataGridTemplateColumn` containing two buttons, as follows: ``` <toolkit:DataGridTemplateColumn Header="Actions"> <toolkit:DataGridTemplateColumn.CellTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <Button Content="ActionOne" /> <Button Content="ActionTwo" /> </StackPanel> </DataTemplate> </toolkit:DataGridTemplateColumn.CellTemplate> </toolkit:DataGridTemplateColumn> ``` What I want to do is bind the IsEnabled property of these buttons to a comparison based on the value of {Binding Path=Status}. For example, in pseudocode: ``` ActionOne.IsEnabled = BoundValue.Status != SomeEnum.Two ActionTwo.IsEnabled = BoundValue.Status == SomeEnum.One || BoundValue.Status == SomeEnum.Two ``` Is there anyway to do this in XAML? The alternative would be just to write a value converter for each button, but since the content and other details of the button may vary, too, I don't want to end up writing like 6 value converters. Cheers!

Original source