| 

.NET C# Java Javascript Exception

3
Ich habe ein in einem ViewModel eine Liste von TabItems mit Header Informationen und eine Content-Property die eine View hält.

Nun wird in der jeweiligen View einiges an Daten geladen und ich möchte gerne die Views mittels der Klasse Lazy laden.

Mein Ansatz dazu sieht folgendermaßen aus:

public ObservableCollection<ImageTabItem> Tabs { get; set; }
...
Tabs = new ObservableCollection<ImageTabItem>();

Tabs.Add(new ImageTabItem
{
Header = "Suche",
Image = new Image { Source = new BitmapImage(new Uri(@"pack://application:,,,/Extranet;component/Images/first.png")) },
Content = new Lazy<ExtranetSucheView>(() => new ExtranetSucheView()),
});

Tabs.Add(new ImageTabItem
{
Header = "Direktaufruf",
Image = new Image { Source = new BitmapImage(new Uri(@"pack://application:,,,/Extranet;component/Images/second.png")) },
Content = new Lazy<DirektaufrufView>(() => new DirektaufrufView()),
});


Mein TabControlStyle (Template Property):
<Setter Property="Template">
<Setter.Value>

<ControlTemplate TargetType="TabControl">
<Grid Background="Transparent" Height="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=ActualHeight}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>

<Border Padding="10 0 0 0" Background="Transparent">
<TabPanel IsItemsHost="True"/>
</Border>

<Border Grid.Row="1" BorderThickness="1 1 1 1" BorderBrush="Transparent">
<ContentPresenter ContentSource="SelectedContent" />
</Border>

</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>


Leider funktioniert dies so nicht, ich bekomme anstelle der View folgenden Text angezeigt: "Der Wert wurde nicht erstellt"

Ich weiß nicht wann ich "Value" aufrufen soll.
Dies sollte im ContentPrenter passieren, jedoch weiss ich nicht wie.


Wie folgt funktioniert nicht:

{"Die Eigenschaften von \"ContentPresenter\" können nicht gebunden werden, da für den Typ \"System.Windows.Controls.TabControl\" keine Eigenschaft mit dem Namen \"SelectedContent.Value\" vorhanden ist."}
<ContentPresenter ContentSource="SelectedContent.Value" />


{"Die Eigenschaften von \"ContentPresenter\" können nicht gebunden werden, da für den Typ \"System.Windows.Controls.TabControl\" keine Eigenschaft mit dem Namen \"Content.Value\" vorhanden ist."}
<ContentPresenter ContentSource="Content.Value" />


Keine Anzeige
<ContentControl Content="{Binding Content.Value}" />


Hat wer einen Tipp? Oder liege ich komplett daneben?!
16.06.2011
Mario Priebe 5,8k 2 9
1 Antwort
2
Hallo Mario,

Es hilft ein kleiner Umweg. Anstatt den Content direkt zuzuweisen, verwendest du ein Binding, also in etwa so:

var t1 = new Lazy<ExtranetSucheView>(() => new ExtranetSucheView());
var binding = new Binding();
binding.Source = t1;
binding.Path = new PropertyPath("Value");

tab1.SetBinding(TabItem.ContentProperty, binding);


Hoffe geholfen zu haben,

Grüße
Maria
18.06.2011
Maria Simlinger 864 8
perfekt, danke dir
Mario Priebe 20.06.2011

Stelle deine .net-Frage jetzt!