У меня есть DataGrid
, и у каждой строки есть Button
, который изменяет заданное значение столбца c строки. Я использую Caliburn Micro
, и каждый работает отлично. То, что я хотел бы сделать, это взять Button
за пределы DataGrid
. После выбора нескольких строк и последующего нажатия только одной кнопки `значение столбца изменится так же, как и раньше, но на этот раз для всех выбранных строк. Вот несколько фрагментов из моего текущего кода:
DataView.xaml:
<DataGrid Grid.Row="1" x:Name="Changes" CanUserAddRows="False"
AutoGenerateColumns="False" AlternatingRowBackground="#FFF7F7F7">
<DataGrid.Columns>
<DataGridTextColumn ... />
<DataGridTextColumn ... />
<DataGridTemplateColumn CellStyle="{StaticResource DataGridCellCentered}" Header="Validation">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Grid>
<Button Margin="20 0 20 0" Visibility="{Binding DataContext.Validated,
Converter={StaticResource BoolToVisConverter}, RelativeSource={RelativeSource AncestorType=DataGridCell}}"
cal:Message.Attach="[Event Click] = [Action Validate($this)]" Cursor="Hand"
cal:Action.TargetWithoutContext="{Binding DataContext, RelativeSource={RelativeSource AncestorType=DataGrid}}">
Validate
</Button>
<StackPanel Orientation="Horizontal" Margin="20 0 20 0"
Visibility="{Binding DataContext.Validiert,
Converter={StaticResource BoolToVis}, RelativeSource={RelativeSource AncestorType=DataGridCell}}">
<TextBlock>Validated</TextBlock>
<Button Margin="20 0 0 0" Padding="10 0 10 0" FontSize="25" Foreground="#FF2F5778"
cal:Message.Attach="[Event Click] = [Action Unvalidate($this)]" Cursor="Hand"
cal:Action.TargetWithoutContext="{Binding DataContext, RelativeSource={RelativeSource AncestorType=DataGrid}}" >
⮌
</Button>
</StackPanel>
</Grid>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
DataViewModel.cs:
public void Validate(ChangesModel model)
{
model.Validated= true;
model.ValidateDate = DateTime.Now;
model.ValidatedBy = LoggedUser.loggedUser;
db.CheckValidate(model);
}
public void Unvalidate(ChangesModel model)
{
model.Validated= false;
model.ValidateDate = null;
model.ValidatedBy = null;
db.UnCheckValidate(model);
}
ChangesModel.cs:
public class ChangesModel : INotifyPropertyChanged
{
private bool _validated;
public bool Validated
{
get { return _validated; }
set { _validated= value; NotifyPropertyChanged(); }
}
private DateTime? _validatedate;
public DateTime? ValidateDate
{
get { return _validatedate; }
set { _validatedate= value; NotifyPropertyChanged(); }
}
private string _validatedBy;
public string ValidatedBy
{
get { return _validatedBy; }
set { _validatedBy= value; NotifyPropertyChanged(); }
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName] String propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
Есть ли у кого-нибудь какие-либо предложения о том, как создать действие для Button
, чтобы оно запускало метод Validate
для каждая выбранная строка DataGrid
?