У меня возникли проблемы с TextBox.Text
свойства TextBox.Text
к методу объекта. Идея заключается в том, чтобы позволить пользователю записать в TextBox
имя файла и затем получить вывод TextBlock
таким расширением.
class GetFileInfo
{
public string GetFileExtension(string fileName)
{
return Path.GetExtension(fileName);
}
}
Вот мой XAML:
<Window.Resources>
<ObjectDataProvider x:Key="getFileInfo" MethodName="GetFileExtension" ObjectType="{x:Type local:GetFileInfo}">
<ObjectDataProvider.MethodParameters>
<sys:String>abc.text</sys:String>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
<StackPanel>
<TextBox Name="textBox1">
<TextBox.Text>
<Binding Source="{StaticResource getFileInfo}" Path="MethodParameters[0]" BindsDirectlyToSource="True" UpdateSourceTrigger="PropertyChanged" />
</TextBox.Text>
</TextBox>
<TextBlock Name="textBlock1" Text="{Binding Source={StaticResource getFileInfo}}"/>
</StackPanel>
По какой-то причине он ничего не делает. Кто-нибудь может указать на причины? Вот что я вижу на дизайнере и когда запускаю приложение:
И вот что происходит, когда я пытаюсь установить другой текст во время выполнения:
Вот ошибка, выдаваемая de debugger при попытке установить другой текст во время выполнения:
Ошибка System.Windows.Data: 8: Невозможно сохранить значение от цели назад к источнику. BindingExpression: Path = MethodParameters [0]; DataItem = 'ObjectDataProvider' (HashCode = 2207369); целевым элементом является TextBox (Name = 'textBox1'); Свойство target имеет значение "Text" (тип "String"). ArgumentException: "System.ArgumentException: объект типа" MS.Internal.Data.PropertyPathWorker + IListIndexerArg "не может быть преобразован в тип" System.Int32 ". в System.RuntimeType.TryChangeType (значение объекта, связыватель Binder, культура CultureInfo, логическое значение needsSpecialCast) в System.RuntimeType.CheckValue (значение объекта, связыватель Binder, CultureInfo culture, invindingAttr BindingFlags, в System.Reflection.MethockguCaseCase). параметры, связыватель Binder, BindingFlags invokeAttr, культура CultureInfo, сигнатура сигнатуры) в System.Reflection.RuntimeMethodInfo.Invoke (объектный объект, BindingFlags invokeAttr, связыватель Binder, параметры Object [], CultureInfo культура, логические skipVisibilityChecks) в System.RuntimeMhofo.MunfoTimeTime.RoInfo.Mun Вызвать (Object obj, BindingFlags invokeAttr, Binder Binder, параметры Object [], CultureInfo culture) в System.Reflection.RuntimePropertyInfo.SetValue(Object obj, Object value, BindingFlags invokeAttr, Binder Binder, Object [] index, CultureInfo culture) в MS.Internal.Data.PropertyPathWorker.SetValue (Элемент объекта, значение объекта) в MS.Internal.Data.ClrBindingWorker.UpdateValue (значение объекта) в System.Windows.Data.BindingExpre ssion.UpdateSource (значение объекта) '