Databinding an eine Methode in WPF

Ich habe Probleme bei Datenbindung für ein TextBox.Text - Eigenschaft, um ein Objekt Methode. Die Idee ist, das dem Benutzer erlaubt zu schreiben TextBox eine Datei Namen und dann haben TextBlock Ausgabe, die Datei-Endung.

class GetFileInfo
{
    public string GetFileExtension(string fileName)
    {
        return Path.GetExtension(fileName);
    }
}

Hier ist mein 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>

Aus irgendeinem Grund ist es nicht etwas zu tun. Anyknow hinweisen könnten, was könnten die Gründe sein?
Hier ist, was ich sehe, auf der designer und wenn ich die Anwendung ausführen:

alt-text http://img64.imageshack.us/img64/6922/f0rki14feo3oa3groxm5kgm.png

Und hier ist, was passiert, wenn ich versuche, eine andere Einstellung text zur Laufzeit:

alt-text http://img684.imageshack.us/img684/1057/b52pnq1dm4i23qivizvpaqq.png
Hier ist der Fehler gegeben durch die de-debugger wenn Sie versuchen, einen anderen text zur Laufzeit:

System.Windows.Datenfehler: 8 : speichern Nicht Wert vom Ziel zurück zur Quelle. BindingExpression:Path=MethodParameters[0]; DataItem='ObjectDataProvider' (HashCode=2207369); target element is 'TextBox' (Name='textBox1'); target-Eigenschaft 'Text' (Typ 'String') ArgumentException:'System.ArgumentException: das Objekt des Typs " MS. Internal.Daten.PropertyPathWorker+IListIndexerArg' kann nicht konvertiert werden, um den Typ 'System.Int32'.
System.RuntimeType.TryChangeType(Object value, Binder Binder, CultureInfo culture, Boolean needsSpecialCast)
System.RuntimeType.CheckValue(Object value, Binder Binder, CultureInfo culture, BindingFlags invokeAttr)
System.Reflexion.MethodBase.CheckArguments(Object [] - Parameter, Binder Binder, BindingFlags invokeAttr, CultureInfo culture, Signatur sig)
System.Reflexion.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder Binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
System.Reflexion.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder Binder, Object[] parameters, CultureInfo culture)
System.Reflexion.RuntimePropertyInfo.SetValue(Object obj, Object value, BindingFlags invokeAttr, Binder Binder, Object[] index, CultureInfo culture)
bei MS. Internal.Daten.PropertyPathWorker.SetValue(Object Element, Object Wert)
bei MS. Internal.Daten.ClrBindingWorker.UpdateValue(Object Wert)
System.Windows.Daten.BindingExpression.UpdateSource(Object value)'

Ändern Sie die Idee von binding-Methode, - Eigenschaft. und lernen, das Konzept der INotifyPropertyChanged - & DataContext. Google einige MVVM-pattern zu.
+1 für eine Frage hat, wird helfen, eine Menge Menschen, die das nicht verstehen, databinding.

InformationsquelleAutor devoured elysium | 2010-02-21

Schreibe einen Kommentar