【发布时间】:2014-12-11 20:29:29
【问题描述】:
好的,这就是交易。 我有一个 CollectionViewSource:
<CollectionViewSource x:Key="PA_System_AppStatus">
<CollectionViewSource.Source>
<SystemCols:ArrayList>
<ComboBoxItem Content="Active" />
<ComboBoxItem Content="Denied" />
<ComboBoxItem Content="Granted" />
</SystemCols:ArrayList>
</CollectionViewSource.Source>
</CollectionViewSource>
我还绑定了一个 ComboBox:
<ComboBox x:Name="Perro" Tag="Application"
SelectedValue="{Binding Path=[AppStatus], Converter={StaticResource AppStatusConverter}}"
ItemsSource="{Binding Source={StaticResource PA_System_AppStatus2}}"/>
AppStatus 是 DataRow 中的一个字符,可能是 A、D、G。 因此,我希望 ComboBox 在上面显示整个 ComboBoxItem,但在字段中存储 char。为此,我写了这个转换器:
public class AppStatusConverter : IValueConverter
{
public object Convert(
object value,
System.Type targetType,
object parameter,
System.Globalization.CultureInfo culture
)
{
string returnValue = null;
if (value != System.DBNull.Value && value != null)
{
if ((string)value == "A")
returnValue = "Active";
else if ((string)value == "D")
returnValue = "Denied";
else if ((string)value == "G")
returnValue = "Granted";
else
returnValue = null;
}
return returnValue;
}
public object ConvertBack(
object value,
System.Type targetType,
object parameter,
System.Globalization.CultureInfo culture
)
{
string returnValue = null;
string tempvalue = ((ComboBoxItem)value).Content.ToString();
if (tempvalue == "Active")
returnValue = "A";
else if (tempvalue == "Denied")
returnValue = "D";
else if (tempvalue == "Granted")
returnValue = "G";
else
returnValue = null;
return returnValue;
}
}
ConvertBack 部分完美运行,每当我选择一个值时,DataRow 都会被其中一个字符(A、D 或 G)填充。
但是,Convert 没有。例如,我从数据库加载一个 DataRow。然后,转换器正确地获取“AppStatus”列中的值,并尝试将其转换为选择组合框项目之一并分配 SelectedValue。但是,什么都没有发生。
【问题讨论】:
标签: c# wpf combobox collectionviewsource