好的我在這裏有一個奇怪的。我想弄清楚的是,如何讓一個ListView由ObservableCollection填充,根據第一個listview的選擇更新另一個由另一個ObservableCollection填充的ListView,然後使用valueconverter根據選擇組合來選中或取消選中複選框與第二個列表視圖中的當前項目。這部分我有點使用多重綁定工作,但有我難倒的部分是當我檢查或取消選中第二個列表視圖中的項目時,我需要能夠抓取該事件,並且該列表中的所有當前選中的項目都會查看更新數據庫字段基於此。Multibinding Multiselection ListView
我知道這可能沒有多大意義,我正在努力如何使它更清晰,但下面是xaml的兩個listviews和轉換器的代碼。我可以看到,當我在secodn listview中選中或取消選中一個框時,轉換器會嘗試執行ConvertBack方法,但如果將其設置爲僅返回null,則代碼不再起作用,但複選框將突出顯示紅色像驗證錯誤已經發生。
我甚至不確定多重綁定是如何去這裏的,我已經看過Josh Smith的多選列表視圖的東西,但是隨着所需的轉換,我無法看到如何成功實現它。
如果有人有任何想法,我將不勝感激。如果我沒有非常清楚地解釋我的需求,我也很抱歉,但我希望能夠看到混亂的描述和代碼,以便我能夠看到我的目標。
在此先感謝!
首先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和multibinding
<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 };
}}