我正在使用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;
}
.....