我有以下DataGrid
:
<DataGrid ItemsSource="{Binding Coll.View}" SelectedItem="{Binding SelectedTransaction}"
ScrollViewer.CanContentScroll="True"
ScrollViewer.VerticalScrollBarVisibility="Visible"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Date" Binding="{Binding Date}" Width="100" />
<DataGridTextColumn Header="Category" Binding="{Binding Path=SelectedCategory.CategoryName}" Width="100" />
<DataGridTextColumn Header="Payee" Binding="{Binding Path=SelectedPayee.PayeeName}" Width="100" />
<DataGridTextColumn Header="Withdrawal" Width="100" />
<DataGridTextColumn Header="Deposit" Width="100" />
<DataGridTextColumn Header="Total" Binding="{Binding AccountBalance}" Width="100" />
</DataGrid.Columns>
交易是ObservableCollection
项TransactionViewModel
。
这些项目具有此属性,这是一个枚举,可以是:存款,提款。
private TransactionTypes tType;
public TransactionTypes TransactionType
{
get { return tType; }
set
{
tType = value;
OnPropertyChanged("TransactionType");
}
}
和这一个:
public double? TransactionAmmount
{
get { return ammount; }
set
{
ammount = value;
OnPropertyChanged("TransactionAmmount");
}
}
是否可以根据TransactionType的值绑定TransactionAmmount?如果TransactionType为Deposit,则将TransactionAmmount绑定到Deposit datagrid列。
如果TransactionType为Withdrawal,则将TransactionAmmount绑定到Withdrawal列。
答案 0 :(得分:1)
你必须使用ElementStyle和EdittingElementStyle来实现你想要的触发器:
<DataGridCheckBoxColumn Header="OK" Binding="{Binding Goedgekeurd,UpdateSourceTrigger=PropertyChanged}"
ElementStyle="{StaticResource GoedkeuringCheckBoxStyle}"
EditingElementStyle="{StaticResource GoedkeuringCheckBoxStyle}"/>
样式是在资源中预先定义的:
<Style x:Key="GoedkeuringCheckBoxStyle" TargetType="CheckBox">
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="VerticalAlignment" Value="Center" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsWachtOpGoedkeuringKlant}" Value="False">
<Setter Property="IsEnabled" Value="False"/>
</DataTrigger>
</Style.Triggers>
</Style>
这里的示例来自我的代码我没有更改它们以完全符合您的问题,但我希望您可以关注正在发生的事情并根据您的需求进行调整。 关键是绑定总是在行级别上。
但是如果你使用MVVM,那么你可以在viewmodel中而不是在视图中执行逻辑。这可以使事情变得更简单。