我正在构建WPF MVVM应用程序以与SharePoint列表数据进行交互。到目前为止,一切正常,但我反对尝试处理多选字段。 Sharepoint以字符串数组形式提供数据,我需要将其转换为复选框。
我一直在尝试转换功能,但效果不佳,但是ConvertBack函数根本无法正常工作。我将字段绑定到三个复选框,并为每个复选框设置了一个转换参数以区分它们。我不确定的是如何从三个复选框返回一个string []。
以下是字段的XAML:
<StackPanel Orientation="Horizontal">
<Label>Correspondence</Label>
<CheckBox Name="chkP1Correspond" IsChecked="{Binding Path=Student.Parent_x0020_1_x0020_Mailing_x00, Converter={StaticResource mailingOptsBoolConverter}, ConverterParameter=Correspondence}" Margin="5,6,0,0"/>
<Label>Scheduling</Label>
<CheckBox Name="chkP1Sched" IsChecked="{Binding Path=Student.Parent_x0020_1_x0020_Mailing_x00, Converter={StaticResource mailingOptsBoolConverter}, ConverterParameter=Scheduling}" Margin="5,6,0,0"/>
<Label> Billing</Label>
<CheckBox Name="chkP1Bill" IsChecked="{Binding Path=Student.Parent_x0020_1_x0020_Mailing_x00, Converter={StaticResource mailingOptsBoolConverter}, ConverterParameter=Billing}" Margin="5,6,0,0"/>
</StackPanel>
这是我的转换函数:
public class mailingOptsBoolConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
string[] arrayValue = value as string[];
string strParam = parameter as string;
if (arrayValue is null)
{ return false; }
else
{
if (Array.IndexOf(arrayValue, strParam) > -1)
{ return true; }
else { return false; }
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is bool)
{
if ((bool)value == true)
{
return (string)parameter;
}
else
{
return null;
}
}
return null;
}
}
毫不奇怪,这不起作用。 Convert函数似乎可以正常运行,并且正确呈现了复选框。但是,如果取消选择其中一个复选框,则它们都将清除。此外,如果我尝试将数据保存回Sharepoint,则不会更新任何内容。我很确定这是由于ConvertBack函数引起的,但是我不确定如何解决它。