Я решил свою проблему, используя команду вместе с тегом, содержащим имя свойства модели, которое я хочу установить, и параметром CommandParameter, установленным для множественного связывания, который связан с тегом и свойством IsSelected флажка.Код выглядит следующим образом:
Xaml ресурсы My View:
<UserControl.Resources>
<converters:NameValueMultiBindingConverter x:Key="SelectAllConverter" />
</UserControl.Resources>
Xaml My View:
<ListView ItemsSource="{Binding AveragingParameters}">
<ListView.View>
<GridView AllowsColumnReorder="False">
<GridViewColumn Header="Parameter">
<GridViewColumn.CellTemplate>
<DataTemplate>
<DockPanel>
<TextBlock Text="{Binding Name}" />
</DockPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Stretch">
<CheckBox x:Name="chkAvg" IsChecked="{Binding CalcAverage}" />
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
<CheckBox x:Name="chkAvgSelectAll" Content="Avg"
Tag="CalcAvg" Command="SelectAllCheckedCommand"
ToolTip="Select All">
<MultiBinding Converter="{StaticResource SelectAllConverter}">
<Binding Path="Tag" RelativeSource="{RelativeSource self}" />
<Binding Path="IsChecked" RelativeSource="{RelativeSource self}" />
</MultiBinding>
</CheckBox>
</GridViewColumn>
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<Grid HorizontalAlignment="Stretch">
<CheckBox x:Name="chkMin" IsChecked="{Binding CalMin}" />
</Grid>
</DataTemplate>
</GridViewColumn.CellTemplate>
<CheckBox x:Name="chkMinSelectAll" Content="Avg"
Tag="CalcMin" Command="SelectAllCheckedCommand"
ToolTip="Select All">
<MultiBinding Converter="{StaticResource SelectAllConverter}">
<Binding Path="Tag" RelativeSource="{RelativeSource self}" />
<Binding Path="IsChecked" RelativeSource="{RelativeSource self}" />
</MultiBinding>
</CheckBox>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
My MultiValueConverter:
public class NameValueMultiBindingConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
var parameters = (object[])values;
return new NameValueConverterResult
{
Name = (string)parameters[0],
Value = parameters[1]
};
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
объект результата, который я использую в конвертере:
public class NameValueConverterResult
{
//The name of the model property to set
public string Name { get; set; }
//The value we're setting it to
public object Value { get; set; }
}
DelegateCommand (я использую PRISM) и обработчик в моей модели представления
public ICommand SelectAllCheckedCommand { get; private set; }
private void OnSelectAllCheckedCommand(object arg )
{
if (arg == null || !(arg is NameValueConverterResult)) return;
NameValueConverterResult prop = arg as NameValueConverterResult;
//Reflect on the model to find the property we want to update.
PropertyInfo propInfo = Averagers.FirstOrDefault().GetType().GetProperty(prop.Name);
if (propInfo == null) return;
//Set the property on the Model
foreach (var item in Averagers)
propInfo.SetValue(item, prop.Value, null);
}
Надеюсь, я не злоупотребляюStackOverflow предоставляет решение, которое я придумал.Я не был уверен в этикете здесь.