Существует относительно простая вещь, которую я пытаюсь достичь, но я не уверен, как это сделать. В принципе, у меня есть класс CLR следующим образом:Связывание WPF на основе сравнения
class SomeClass
{
public SomeEnum Status;
}
public enum SomeEnum { One, Two, Three };
У меня есть DataGrid, что я связывании ObservableCollection<SomeClass>
программным путем отделенного кода. В этом DataGrid У меня есть DataGridTemplateColumn
, содержащий две кнопки, как показано ниже:
<toolkit:DataGridTemplateColumn Header="Actions">
<toolkit:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button Content="ActionOne" />
<Button Content="ActionTwo" />
</StackPanel>
</DataTemplate>
</toolkit:DataGridTemplateColumn.CellTemplate>
</toolkit:DataGridTemplateColumn>
То, что я хочу сделать, это связать свойство IsEnabled этих кнопок для сравнения на основе значения {Binding Path = Status}. Например, в псевдокоде:
ActionOne.IsEnabled = BoundValue.Status != SomeEnum.Two
ActionTwo.IsEnabled = BoundValue.Status == SomeEnum.One || BoundValue.Status == SomeEnum.Two
Есть ли все-таки сделать это в XAML? Альтернативой было бы просто написать конвертер значений для каждой кнопки, но поскольку содержимое и другие детали кнопки могут меняться, я тоже не хочу писать как 6 преобразователей значений.
Cheers!
Да, это идиома MVVM. – itowlson
Я играл с этим. Хотя он определенно работает и имеет наименьшее количество кода, в то же время он включает в себя информацию пользовательского интерфейса внутри моего объекта. Например, если я хочу, чтобы содержимое кнопки зависело от статуса, мне пришлось бы поместить эту информацию в мои свойства SomeClass, тогда как это должно быть где-то в классах View/XAML – sohum
Если это вас беспокоит, тогда вам, вероятно, понадобится использовать предложенный мной метод конвертации. –