如何使用wpf根据另一个列表框中的选择突出显示一个列表框中的项目

时间:2014-04-14 16:37:34

标签: wpf xaml

我正在使用wpf / mvvm完成我的第一个项目并被卡在这里。我真的需要你的帮助和建议。提前谢谢。

我正在进行报告过滤器构建屏幕,允许用户创建和维护过滤器列表。 ReportFilter对象有四个属性:status,party,absencecode& fitlername,从数据库获取。每当用户通过单击列表框中的filtername选择过滤器时,相关联的状态(一组单选按钮),一方(一组单选按钮)&将检查/突出显示缺席代码(包含缺席代码列表的列表框)。我可以根据选择选中单选按钮。但无法在列表框中突出显示缺省代码中的项目。调试时,我可以在Convert()中获取selectedFilter.AbsenceCode for missingcode的listbox。但我不知道如何比较列表中的值并突出显示它。就像传递给ConverterParameter进行比较的param一样?

以下是我的一些代码:

public class ReportFilter : ModelBase
{
    String _Status;
    String _Party;
    String _AbsenseCode;
    String _FilterName;

    public String AbsenseCode
    {
        get { return _AbsenseCode; }
        set
        {
            if (_AbsenseCode == value)
                return;
            _AbsenseCode = value;
            OnPropertyChanged("AbsenseCode");
        }
    }
    ....
 }


public class ReportsViewModel : ModelBase
{
    private ReportFilter _selectedFilter;
    public ReportFilter selectedFilter
    {
        get
        {
            return _selectedFilter;
        }
        set
        {
            _selectedFilter = value;
            OnPropertyChanged("selectedFilter");
        }
    }
 ......

以下是xaml代码:

    <!-- absence code list -->
    <ListBox Name="Absence
Code" ItemsSource="{Binding absenseCodeItems}" SelectedItem="{Binding seletedFilter.AbsenseCode,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" Grid.Row="1" Grid.Column="1" Grid.RowSpan="5" Margin="20,0,20,5" >
       <ListBox.ItemContainerStyle>
          <Style TargetType="ListBoxItem">
             <Setter Property="IsSelected"  Value="{Binding Path=DataContext.selectedFilter.AbsenseCode, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type GroupBox}},  Converter={StaticResource IsItemSelected}, ConverterParameter=}"/>
           </Style>
       </ListBox.ItemContainerStyle>
    </ListBox>

    <!-- filter list -->
    <ListBox Name="FilterListbox" ItemsSource="{Binding Path=filterItems}" Grid.Row="1" Grid.RowSpan="4" Grid.Column="2" Margin="20,0,20,5"  SelectedItem="{Binding selectedFilter, Mode=OneWayToSource, UpdateSourceTrigger=PropertyChanged}">
    </ListBox>

状态的一组单选按钮:

<RadioButton GroupName="Group1" Name="Current"  Grid.Column="0" Foreground="White" Content="Current" Margin="10,0,0,0" IsChecked="{Binding Path=selectedFilter.Status, Converter={StaticResource BooleanToStringValueConverter}, ConverterParameter=C}"/>

<RadioButton GroupName="Group2" Name="Historical" Grid.Column="1" Foreground="White" Content="All Historical" IsChecked="{Binding Path=selectedFilter.Status, Converter={StaticResource BooleanToStringValueConverter}, ConverterParameter=A}"/>

...

视图模型中的转换器:

.....
    public class IsItemSelected : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (System.Convert.ToString(value).Equals(System.Convert.ToString(parameter)))
            {
                return true;
            }
            return false;
        }
.....

0 个答案:

没有答案