我有一个组合框,它绑定到数据表列,如下所示:
ComboBox.DataContext = DataDataTable;
ComboBox.DisplayMemberPath = DataDataTable.Columns["IDNr"].ToString();
Run Code Online (Sandbox Code Playgroud)
列中的IDNr始终以4个字母开头,后跟ID号(例如BLXF1234).我需要在没有字母的情况下在Combobox中显示项目(我需要在组合框中显示1234).
所以我写了一个转换器:
class IDPrefixValueConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null)
{
string s = value.ToString();
if (s.Contains("BL"))
{
return s.Substring(4);
}
else
{
return s;
}
}
return "";
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
Run Code Online (Sandbox Code Playgroud)
不,我怎么能告诉组合框使用转换器来显示项目?我在Xaml中试过这个:
ItemsSource="{Binding}"
DisplayMemberPath="{Binding Converter={StaticResource IDPrefixValueConverter}}"
Run Code Online (Sandbox Code Playgroud)
但仍然没有工作...任何想法?谢谢
加长版:与日期转换相比,我有一个简单的WPF转换器。转换器基本上检查日期并将其格式化为dd / M / yyyy格式。转换器会巧妙地处理日期,这意味着用户可以键入“ 23061971”,并且该值将转换为“ 23/06/1971”。
所有这些都是微不足道的,而且有效。问题是,当我更新该值时,它不会更新插入符号的位置。假设“ |” 是插入符号,用户键入“ 23061971 |” 然后在一毫秒后将其更新为“ 230619 | 71”。
我想做的是检测插入符号是否位于值的末尾-如果是,请在新值更新后将其移至编辑字段的末尾。为此,我将需要访问附加转换器的编辑控件。
简短版:我可以从WPF转换器中获取绑定到该转换器的控件的引用吗?