Hallo,
ich habe eine ObservableCollection, die ich an ein ItemsControl gebunden habe. Die Einzelnen Items sollen als Buttons dargestellt werden. Das ganze sieht so aus:
<ScrollViewer>
<Grid DataContext="{StaticResource mainViewModel}" HorizontalAlignment="Left" VerticalAlignment="Top">
<ItemsControl Background="Red" ItemsSource="{Binding Path=ShelfsCollection}" HorizontalAlignment="Left" VerticalAlignment="Top">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Canvas>
<Button HorizontalAlignment="Left"
VerticalAlignment="Top"
BorderThickness="0"
BorderBrush="Black"
Width="{Binding CategoryWidth}" Height="{Binding Path=CategoryHeight}"
Margin="{Binding Path=ShelfLocation,Converter={StaticResource PointToMargin}}"
Command="{Binding Path=AddPointCommand}"
Content="{Binding Path=ShelfNumber}" />
</Canvas>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</ScrollViewer>
Das ganze funktioniert sehr gut, allerdings habe ich zwei Probleme:
<ScrollViewer>
<Grid DataContext="{StaticResource mainViewModel}" HorizontalAlignment="Left" VerticalAlignment="Top">
<Button HorizontalAlignment="Left"
VerticalAlignment="Top"
BorderThickness="0"
BorderBrush="Black"
Command="{Binding AddPointCommand}"
Content="XXXXXX" />
</Grid>
</ScrollViewer>
Ich nehmen an, dass der Fehler im XAML zu suchen ist, oder ?
Hallo,
zu 1.: Er kann das Command nicht finden, da der DataContext ja nen ganz anderer ist. Im funktionierenden Beispiel ist der DataContext ja das mainViewModel. In der Liste dagegen ist der DataContext ja das Item, für das das Template angewendet und nicht dein mainViewModel.
zu 2.: Hat nichts mit DataBinding zu tun, sondern dem Canvas was da im Template eh völlig überflüssig ist. Die Canvas haben ne Größe von 0 und daher ist auch Sicht des ScrollViewers alles paletti da ja alle Items reinpassen.
Und noch nen kleiner Hinweis am Ende: Bitte immer [Hinweis] Wie poste ich richtig? Punkt 1.2 beachten.
Baka wa shinanakya naoranai.
Mein XING Profil.
Dann hast du den Vorschlag aus dem anderne genannten Thread aber nicht richtig umgesetzt. Ich sprach dort von einem Canvas als ItemsPanel für dein ItemsControl und nicht davon im ItemTemplate ein Canvas zu benutzen. Für die Items werden nur die entsprechenden Attached Properties gesetzt um diese dann innerhalb des ItemPanels zu positionieren.
Baka wa shinanakya naoranai.
Mein XING Profil.
Hallo Talla,
ich stehe hier echt auf dem Schlauch und kommen mit den Attached Properties nicht weiter:
<ItemsControl ItemsSource="{Binding Path=Shelfs}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas>
</Canvas>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style TargetType="ContentPresenter">
<Setter Property="Canvas.Width" Value="{Binding CategorieWidth}" />
<Setter Property="Canvas.Height" Value="{Binding CategorieHeight}" />
<Setter Property="Canvas.Margin" Value="{Binding Path=ShelfLocation}" />
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
Irgendwie bekomme ich das Binding nicht hin, vielleicht hast Du ja noch einen Tipp für mich 😃