Обновление
Вы, вероятно, уже решили свою проблему с помощью Влад , я просто подумал, что должен добавить еще один способ фактического получения значения источника в конвертере.
Сначала вы можете сделать свой конвертер производным от DependencyObject
, чтобы вы могли добавить к нему свойство зависимости, которое мы свяжем с
public class MyConverter : DependencyObject, IValueConverter
{
public static DependencyProperty SourceValueProperty =
DependencyProperty.Register("SourceValue",
typeof(string),
typeof(MyConverter));
public string SourceValue
{
get { return (string)GetValue(SourceValueProperty); }
set { SetValue(SourceValueProperty, value); }
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
//...
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
object targetValue = value;
object sourceValue = SourceValue;
//...
}
}
К сожалению, конвертер не имеет DataContext
, поэтому привязка не будет работать из коробки, но вы можете использовать превосходный DataContextSpy
: Контекст искусственного наследования в WPF
<TextBox>
<TextBox.Resources>
<src:DataContextSpy x:Key="dataContextSpy" />
</TextBox.Resources>
<TextBox.Text>
<Binding Path="YourProperty"
ConverterParameter="1">
<Binding.Converter>
<src:MyConverter SourceValue="{Binding Source={StaticResource dataContextSpy},
Path=DataContext.YourProperty}"/>
</Binding.Converter>
</Binding>
</TextBox.Text>
</TextBox>
Конец обновления
Dr.WPF предлагает элегантное решение, см. Следующую ветку
Как получить доступ к источнику привязки в ConvertBack ()?
Редактировать
Используя решение Dr.WPF, вы можете предоставить преобразователю строковый индекс и источник TextBox
с этим (возможно, немного подробным) примером кода
<TextBox dw:ObjectReference.Declaration="{dw:ObjectReference textBoxSource}">
<TextBox.Text>
<Binding Path="YourStringProperty"
Converter="{StaticResource YourConverter}">
<Binding.ConverterParameter>
<x:Array Type="sys:Object">
<sys:Int16>1</sys:Int16>
<dw:ObjectReference Key="textBoxSource"/>
</x:Array>
</Binding.ConverterParameter>
</Binding>
</TextBox.Text>
</TextBox>
И затем вы можете получить доступ как к индексу, так и к TextBox
в методе ConvertBack
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
object[] parameters = parameter as object[];
short index = (short)parameters[0];
object source = (parameters[1] as TextBox).DataContext;
//...
}