DataGrid行datatrigger / template

时间:2015-04-25 17:15:14

标签: c# wpf binding datagrid

我有以下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>

交易是ObservableCollectionTransactionViewModel

这些项目具有此属性,这是一个枚举,可以是:存款,提款。

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列。

1 个答案:

答案 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中而不是在视图中执行逻辑。这可以使事情变得更简单。