2015-04-25 3 views
0

У меня есть следующие DataGrid:DataGrid строки 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> 

Сделки является 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"); 
    } 
} 

Можно ли связать TransactionAmmount на основе стоимости TransactionType? Если TransactionType является вкладкой, привяжите транзакционный столбец к столбцу данных datagrid.

Если TransactionType является Withdrawal, то привяжите TransactionAmount к столбцу Withdrawal.

ответ

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, тогда вы можете делать логику в режиме просмотра, а не в представлении. Это может сделать вещи более простыми.

+0

В конце сделал логику в viewmodel, но я дам ваш код попробовать, может быть полезно. – Cristian

+0

Я использую обе стратегии. Иногда подход viewmodel более удобен. Но иногда это просто проблема с стильным стилем, и мне нравится помещать его в xaml вида. Удачи. –

Смежные вопросы