2015-04-25 54 views
0

我有以下DataGridDataGrid行datatrigger /模板

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

交易是TransactionViewModel项目的ObservableCollection

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

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为撤销,则将TransactionAmmount绑定到撤销列。

回答

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

+0

最后在viewmodel中做了逻辑,但我会试一试你的代码,可能有用。 – Cristian

+0

我正在使用这两种策略。有时候,viewmodel方法更方便。但有时候这只是一个纯粹的造型问题,然后我喜欢把它放在视图的xaml中。祝你好运。 –