WPF binding basiert auf dem Vergleich
Gibt es eine relativ einfache Sache, die ich versuche zu erreichen, aber ich bin mir nicht sicher, wie es zu tun. Im Grunde genommen habe ich eine CLR-Klasse wie folgt:
class SomeClass
{
public SomeEnum Status;
}
public enum SomeEnum { One, Two, Three };
Ich habe ein DataGrid, dass ich die Bindung eines ObservableCollection<SomeClass>
programmgesteuert durch den code-behind. In diesem DataGrid-ich habe eine DataGridTemplateColumn
mit zwei Schaltflächen, wie folgt:
<toolkit:DataGridTemplateColumn Header="Actions">
<toolkit:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Button Content="ActionOne" />
<Button Content="ActionTwo" />
</StackPanel>
</DataTemplate>
</toolkit:DataGridTemplateColumn.CellTemplate>
</toolkit:DataGridTemplateColumn>
Was ich will zu tun ist, binden Sie die IsEnabled-Eigenschaft auf diese Tasten, um einen Vergleich basierend auf dem Wert von {Binding Path=Status}. Zum Beispiel in pseudocode:
ActionOne.IsEnabled = BoundValue.Status != SomeEnum.Two
ActionTwo.IsEnabled = BoundValue.Status == SomeEnum.One || BoundValue.Status == SomeEnum.Two
Gibt es trotzdem, dies zu tun in XAML? Die alternative wäre, nur um zu schreiben ein Wert Konverter für jede Taste, aber da der Inhalt und andere Einzelheiten der Schaltfläche kann variieren, auch ich möchte nicht schreiben wie 6 Wert-Wandler.
Prost!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Warum nicht setzen zusätzliche Eigenschaften, die in SomeClass, die den Vergleich durchführt Logik?
ex:
Dann können Sie leicht binden Sie die Taste IsEnabled zu der entsprechenden Eigenschaft.
Vergessen Sie nicht, eine OnPropertyChanged("ActionOneEnabled") in Ihre Set-für Stand -, so dass, wenn Sie Ihre Status-änderungen Ihrer Eigenschaften in Bezug auf Status neu bewertet.
Könnten Sie dies tun, indem Sie einen DataTrigger in Verbindung mit einem Konverter wie unten. Aber Bryan ' s Lösung hat den Vorteil, dass es nicht der Verwendung mehrerer Wandler und so wie es aussieht, dass war eines Ihrer Anliegen, so seine Antwort könnte besser sein für das Szenario.
Andere option wäre nicht der DataTrigger und fügen Sie die Bindung direkt in die IsEnabled-Eigenschaft: