2015-04-25 57 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中。祝你好運。 –