ListView(Box) a jeho Item (Template) – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

ListView(Box) a jeho Item (Template) – .NET – Fórum – Programujte.comListView(Box) a jeho Item (Template) – .NET – Fórum – Programujte.com

 

VladislavK0
Super člen
8. 10. 2012   #1
-
0
-

Ahoj, potřeboval bych správně nasměrovat jak vytvořit ListBox( nebo ListView) tak aby v každém ITEMu byl zobrazen Text, vedle ProgressBar a nakonci Image. Počet těch ITEMu bude odvozen od velikosti Listu třídy z modelu. 

public class mojeTrida::INotifyPropertyChanged{

        public event PropertyChangedEventHandler PropertyChanged;
	// pouhe jmeno z pohledu Bindingu staticka hodnota
	public string MerenaVelicina{ get; set; } 
	// merene zobrazen hodnotu z pohledu bindingu se budou menit v ProgressBaru
	public int PBMaximum{ get; set; } 
	public int PBOkamzita{ get; set; }
	// obrazek ktery bude zobrazovat nekolik stavu, nevim zda ho zadat jako Image nebo jako string cestu k obrazku 
	public mujObrazek Obrazek{ get; set; }
}

Těch Itemu bude cca 2000 takže by tam měly správně fungovat scrollbary 

Vytvořil jsem si UserControlu 

<UserControl x:Class="PhotoDownloder.ListItemTemplate"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="30"  HorizontalAlignment="Stretch" Name="ListItem">
	<Grid >
		<Grid.ColumnDefinitions>
			<ColumnDefinition Width="39" />
			<ColumnDefinition Width="130" />
			<ColumnDefinition Width="28*" />
		</Grid.ColumnDefinitions>
		<Label Content="text" Name="ItemLabel" VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch" Margin="0,0,9,0" />
		<ProgressBar Grid.Column="1" HorizontalAlignment="Stretch"  Name="ItemProgresBar" VerticalAlignment="Stretch" Height="15" VerticalContentAlignment="Center" Margin="0,8" Width="130" />
		<Image  Grid.Column="2" Height="26" HorizontalAlignment="Center" Name="ItemImage" VerticalAlignment="Center" Width="28" Stretch="Fill" />
	</Grid>
</UserControl>

A zasekl jsem se na tom jak tuto UserControlu pozit jako template pro uvadeny ListBox, Navic si nejsem jist jestli to je ta spravna cesta.

No a následně provést Binding nejspíše na ItemSource cca následujicim způsobem.

<Window x:Class="PhotoDownloder.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="703" xmlns:my="clr-namespace:DataReader">
	<Window.Resources>
		<my:ListItemTemplate x:Key="ListTemplate"/>
	</Window.Resources>
	<Grid>
		<ListView Height="auto" HorizontalAlignment="Left" Name="lstImages" VerticalAlignment="Top" Width="auto" ItemsSource="{Binding ListTemplate}">
		</ListView>
	</Grid>
</Window>

Díky za každou pomoc

Nahlásit jako SPAM
IP: 89.24.8.–
Manželka programátora pošle svého muže koupit chleba s dovětkem kdyby měly housky přines jich deset! Co přinese programátor??
Jan Grygerek
~ Anonymní uživatel
22 příspěvků
8. 10. 2012   #2
-
0
-

#1 VladislavK
Co si pomatuji tak se nedela UserControl, ale DataTemplate a to se preda do ItemTemplate toho listboxu, ItemSource pak bude mit nabindovany ten list z ViewModelu.

Nahlásit jako SPAM
IP: 217.196.209.–
VladislavK0
Super člen
8. 10. 2012   #3
-
0
-

Díky za odpověď

Během odpoledne jsem na to přišel také, a současný stav kódu je následující vše se zobrazuje jak bych si přál ale jednu chybu  na kráse to má

	<Window.Resources>
		<DataTemplate x:Key="MyImagesItemTemplate"   >
			<Grid HorizontalAlignment="Stretch" Width="Auto">
				<Grid.ColumnDefinitions>
					<ColumnDefinition Width="40*"/>
					<ColumnDefinition Width="150*" />
					<ColumnDefinition Width="30"/>
				</Grid.ColumnDefinitions>
				<DockPanel VerticalAlignment="Top" Width="Auto" HorizontalAlignment="Stretch">
					<Label Content="{Binding Path=NameImage}" Name="ItemLabel" DockPanel.Dock="Left"
					 VerticalContentAlignment="Stretch" HorizontalContentAlignment="Stretch" Margin="0,0,9,0" />
					<Image  Grid.Column="2" Height="26" HorizontalAlignment="Center" Name="ItemImage" VerticalAlignment="Center" Width="28" 
					 Source="{Binding Path=ImageState}"	Stretch="Fill" DockPanel.Dock="Right"/>
					<ProgressBar Maximum="{Binding Path=PBMaximum}" Value="{Binding Path=PBCurrent}"
					 Grid.Column="1" Height="15" Margin="0,8" Width="Auto" MinWidth="150" >
					</ProgressBar>
				</DockPanel>
			</Grid>
		</DataTemplate>
	</Window.Resources>

	<Grid>
		<Grid.RowDefinitions >
			<RowDefinition Height="30" />
			<RowDefinition />
		</Grid.RowDefinitions>
		<ListView Grid.Row="1" 
		  ItemTemplate="{StaticResource MyImagesItemTemplate}"
		  Height="Auto" HorizontalAlignment="Stretch" Name="lstImages" VerticalAlignment="Top" Width="auto">
		</ListView>
	</Grid>
</Window>

Jde o to že v době kdy to byla UserControl tak se mi obsah zobrazoval přes celou šířku toho ListView a korektně to reagovalo na změnu velikosti okna, zatím co v případě DataTemplate je zobrazeni také OK ale nechce to měnit tu velikost s ohledem na šířku wokna.

Poradte prosim Proč??

Nahlásit jako SPAM
IP: 89.24.8.–
Manželka programátora pošle svého muže koupit chleba s dovětkem kdyby měly housky přines jich deset! Co přinese programátor??
Jan Grygerek
~ Anonymní uživatel
22 příspěvků
8. 10. 2012   #4
-
0
-

#3 VladislavK
Zkus to necpat do toho dockpanelu, ale rovnou do toho gridu, ten dockpanel je tam v podstate zbytecny.

Nahlásit jako SPAM
IP: 178.72.244.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 6 hostů

Podobná vlákna

ListView Template — založil desiel

C# item to list — založil Ritchie

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý