ОК, у меня тут странный вопрос.Я пытаюсь выяснить, как сделать один просмотр списка, заполненный ObservableCollection, обновить другой ListView, заполненный другим ObservableCollection, на основе выбора первого списка, а затем использовать преобразователь значений, чтобы установить или снять флажок на основе комбинированного выборас текущим элементом во втором списке.Эта часть у меня немного работает с использованием мультисвязывания, но часть, которая меня ставит в тупик, - это когда я проверяю или снимаю отметку с элемента во втором просмотре списка, мне нужно иметь возможность получить это событие и все проверенные в данный момент элементы в этом просмотре списка обновитьполе базы данных, основанное на этом.
Я знаю, что это может не иметь большого смысла, и я изо всех сил пытаюсь сделать его более понятным, но ниже приведены xaml для двух списков и код для конвертера.Я вижу, что, когда я устанавливаю или снимаю флажок в списке просмотра secodn, конвертер пытается выполнить метод ConvertBack, который взрывается, но если я установил его так, чтобы он возвращал только ноль, то код больше не взрывается, но флажок выделенв красном цвете, как будто произошла ошибка проверки.
Я даже не уверен, что многосвязное - это то, что нужно, и я посмотрел на материал множественного выбора Джоша Смита, но с необходимым преобразованием я не могу понять, какреализовать это успешно либо.
Если у кого-то есть идеи, я был бы очень признателен.Также мои извинения, если я не объяснил свою потребность очень четко, но я надеюсь с хаотичным описанием и кодом, который вы можете увидеть, куда я иду с ним.
Заранее спасибо!
Первый ListView, который передает второй
<Grid>
<ListView x:Name="listRule" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="3,3,3,3" ItemsSource="{Binding RuleListing}" exts:Selected.Command="{Binding RuleSelectedCommand}" SelectedIndex="0">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=DisplayName}" ToolTip="{Binding Path=Expression}" FontWeight="Bold"/>
<TextBlock Text=" ( "/>
<TextBlock Text="{Binding Description}" FontStyle="Italic" />
<TextBlock Text=" )"/>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
Второй ListView с конвертером и мультисвязью
<Grid HorizontalAlignment="Stretch">
<Grid.Resources>
<converters:RuleToRoleBooleanConverter x:Key='RuleRoleConverter' />
<DataTemplate x:Key="RoleTemplate">
<Grid HorizontalAlignment="Stretch">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*" MinWidth="200"/>
<ColumnDefinition Width="20"/>
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding RoleName}" HorizontalAlignment="Left" Margin="3,0,0,0" Grid.Column="0" />
<CheckBox HorizontalAlignment="Right" Margin="0,0,3,0" Grid.Column="1">
<CheckBox.IsChecked>
<MultiBinding Converter="{StaticResource RuleRoleConverter}">
<Binding ElementName="listRule" Path="SelectedItem" />
<Binding Path="RoleName"/>
</MultiBinding>
</CheckBox.IsChecked>
</CheckBox>
</Grid>
</DataTemplate>
</Grid.Resources>
<ListView Name="listRoles" ItemsSource="{Binding RoleListing}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
SelectionMode="Multiple" ItemTemplate="{StaticResource ResourceKey=RoleTemplate}">
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="IsSelected" Value="{Binding Mode=TwoWay, Path=IsRoleSelected}"/>
</Style>
</ListView.ItemContainerStyle>
</ListView>
</Grid>
ЗначениеКонвертер
public class RuleToRoleBooleanConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (values[0] != null && values[1] != null)
{
string expression = ((EliteExtenderRule)values[0]).Expression;
string role = values[1].ToString();
if (expression.Contains("R:*") || expression.Contains("R:" + role))
{
return true;
}
}
return false;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
{
return null;// new object[] { (bool)value, null };
}}