soh*_*hum 4 data-binding wpf xaml
我想要实现一个相对简单的事情,但我不确定如何做到。基本上,我有一个 CLR 类,如下所示:
class SomeClass
{
public SomeEnum Status;
}
public enum SomeEnum { One, Two, Three };
Run Code Online (Sandbox Code Playgroud)
我有一个 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>
Run Code Online (Sandbox Code Playgroud)
我想要做的是将这些按钮的 IsEnabled 属性绑定到基于 {Binding Path=Status} 的值的比较。例如,在伪代码中:
ActionOne.IsEnabled = BoundValue.Status != SomeEnum.Two
ActionTwo.IsEnabled = BoundValue.Status == SomeEnum.One || BoundValue.Status == SomeEnum.Two
Run Code Online (Sandbox Code Playgroud)
无论如何,可以在 XAML 中执行此操作吗?另一种方法是为每个按钮编写一个值转换器,但由于按钮的内容和其他细节也可能有所不同,因此我不想最终编写类似 6 个值转换器的代码。
干杯!
为什么不在 SomeClass 中公开执行比较逻辑的附加属性?
前任:
public bool ActionOneEnabled
{
get { return Status != SomeEnum.Two; }
}
Run Code Online (Sandbox Code Playgroud)
然后您可以轻松地将 Button 的 IsEnabled 绑定到适当的 Property。
不要忘记在 Status 的 setter 中包含 OnPropertyChanged("ActionOneEnabled") - 这样当您的 Status 更改时,会重新评估基于 Status 的属性。
| 归档时间: |
|
| 查看次数: |
8347 次 |
| 最近记录: |