4 Stimmen

Bindung mit WindowsFormsHost

Ich versuche, eine Liste von Elementen an ein TabControl zu binden. Die Elemente sehen wie folgt aus:

class SciEditor
{
    private Scintilla editor = null;
    public System.Windows.Forms.Control Editor
    {
        get { return editor; }
    }

    private string path = null;
    public string ShortName
    {
        get
        {
            return null == path ? "New Script" : Path.GetFileNameWithoutExtension(path);
        }
    }
    ....

In meinem Hauptfenster heißt die Liste "allScripts". Hier ist die XAML:

<TabControl Grid.Row="0" Grid.Column="0" Name="tabControl1">
            <TabControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock>                            
                        <TextBlock Text="{Binding ShortName}"/>
                    </TextBlock>
                </DataTemplate>
            </TabControl.ItemTemplate>
            <TabControl.ContentTemplate>
                <DataTemplate>
                    <WindowsFormsHost Child="{Binding Editor}" />
                </DataTemplate>
            </TabControl.ContentTemplate>
</TabControl>

Das Problem ist, dass ich "Child" in WindowsFormsHost nicht einstellen kann, weil

Eine 'Bindung' kann nicht auf die 'Child'-Eigenschaft vom Typ 'WindowsFormsHost' gesetzt werden. Ein 'Binding' kann nur auf eine DependencyProperty eines DependencyObjects gesetzt werden.

Wie kann ich das WindowsFormsHost-Kind festlegen?

EDIT: vergaß zu erwähnen, im Hauptfenster-Konstruktor habe ich:

tabControl1.ItemsSource = allScripts;

9voto

Ändern Sie Ihre Inhaltsvorlage in

<TabControl.ContentTemplate> 
     <DataTemplate> 
          <ContentControl Content="{Binding Editor}" /> 
     </DataTemplate> 
</TabControl.ContentTemplate> 

und ändern Sie die Editor Eigenschaft Ihres Code-Behinds auf

public WindowsFormsHost Editor   
{   
    get { return new WindowsFormsHost(){Child=editor}; }   
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X