[Grafika] [WebTip] [Fotografování] [Galerie] [MujMac] [Printing]
  Redakce: info@builder.cz   Inzerce: reklama@grafika.cz

 Diskuzní forum: .Net

Téma diskuze: Diskuze o technologii .NET; C# atd.

Tip: nemáte rádi v textu smajlíky? Ruší vaše zdrojové kody? Vypněte si je! (Moje nastavení / Nastavení soukromí)
[WPF][C#] Binding
Vloženo uživatelem: martin.developer - uživatel již zaslal 65 příspěvků (IP uloženo)
Datum: 25. 05. 2009 12:22

Dobrý den.

Mám WPF aplikaci se dvěma ListView a první ovlivnuje druhý pomocí SelectionChanged="ListView_SelectionChanged" a potřebuji v C# dosáhnout toho abych tomu druhému v té metodě ListView_SelectionChanged vnutil jiný resource který je zaveden v <Window.Resources> a je to XmlDataProvider.

Nevíte jak na to ?

Re: [WPF][C#] Binding
Vloženo uživatelem: martin.developer - uživatel již zaslal 65 příspěvků (IP uloženo)
Datum: 25. 05. 2009 14:58

Už asi hodinu hledám na internetu, ale nic.
Vážně nikdo neví ?
Nevíte aspon o nějaké alternativě ?

Re: [WPF][C#] Binding
Vloženo uživatelem: JardaJirava (Jarda Jirava) - uživatel již zaslal 215 příspěvků (IP uloženo)
Datum: 25. 05. 2009 16:17

Ahoj,

nevim, jestli jsem to podle popisu pochopil spravne. Ale je mozne,
ze toto by ti mohlo pomoci
http://www.codeproject.com/KB/WPF/SelectDetailLevels.aspx

Pekny den

Jarda Jirava, Microsoft MVP - Client Application, MCAD, MCPD
http://jirava.net/blog

Příspěvek zaslán emailem

Re: [WPF][C#] Binding
Vloženo uživatelem: martin.developer - uživatel již zaslal 65 příspěvků (IP uloženo)
Datum: 25. 05. 2009 16:48

Tohle asi nebudu to co potřebuji.

Mám několik XmlDataProviderů (např. Product1, Product2, Product3, ProductList) v <Window.Resources> v XAMLu.
První ListView zobrazuje data jednoho Resource (ProductList) a druhej by je měl taky ale až po kliknutí na daný řádek (taková specifikace produktu, tj. využije jeden z ProductX, id už mám získaný takže už mám i hotvý string například Product1 ale tedka podle něj najít a zvolit Resource) pomocí SelectionChanged.
Všechno už mám připravený, jen nedokážu ten druhej ListView naplnit tím druhým resource.

Pokud to furt není srozumitelné mohu poskytnout kód.

Re: [WPF][C#] Binding
Vloženo uživatelem: JardaJirava (Jarda Jirava) - uživatel již zaslal 215 příspěvků (IP uloženo)
Datum: 25. 05. 2009 17:10

Ahoj,

vidim v tom akorat rozdil ten, ze v prikladu uvedenem, se vybira
template, ty potrebujes vybrat a bindovat ItemsSource. Proc trvas na
obsluze udalosti?

Pekny den

Jarda Jirava, Microsoft MVP - Client Application, MCAD, MCPD
http://jirava.net/blog

Příspěvek zaslán emailem

Re: [WPF][C#] Binding
Vloženo uživatelem: martin.developer - uživatel již zaslal 65 příspěvků (IP uloženo)
Datum: 25. 05. 2009 17:14

No ono jde o to že, v tom prvním ListViewu je seznam herních serverů (daza získané z XML) a po kliknutí na server chci aby se další listview naplnil daty z dalšího XML (tzn. získá data pro určitý server).

Re: [WPF][C#] Binding
Vloženo uživatelem: martin.developer - uživatel již zaslal 65 příspěvků (IP uloženo)
Datum: 25. 05. 2009 18:15

Napadlo mě to udělat takhle :

var id = Servers.SelectedValue.ToString();
Binding bd = new Binding();
bd.Source = "StaticResource PlayersCS" + id;
bd.XPath = "/Players/Player";

Jen nevím jak mám ten svůj bd nacpat tomu Listviewu jménem Players.

Re: [WPF][C#] Binding
Vloženo uživatelem: JardaJirava (Jarda Jirava) - uživatel již zaslal 215 příspěvků (IP uloženo)
Datum: 25. 05. 2009 18:49

Ahoj,

jde to i pres onen zmineny resource valueconverter. Pokud se k tomu
vecer dostanu, tak na to napisu blog post, ted uz se padim bavit.

Pekny den

Jarda Jirava, Microsoft MVP - Client Application, MCAD, MCPD
http://jirava.net/blog

Příspěvek zaslán emailem

Re: [WPF][C#] Binding
Vloženo uživatelem: JardaJirava (Jarda Jirava) - uživatel již zaslal 215 příspěvků (IP uloženo)
Datum: 26. 05. 2009 08:32

Ahoj,

tak jak jsem slibil, tak se mi to i povedlo splnit, takze vysledek je zde
http://jirava.net/blog/Archive/wpf-binding-bez-codebehind.aspx

i s projektem ke stazeni.

Pekny den

Jarda Jirava, Microsoft MVP - Client Application, MCAD, MCPD
http://jirava.net/blog

Příspěvek zaslán emailem

Re: [WPF][C#] Binding
Vloženo uživatelem: martin.developer - uživatel již zaslal 65 příspěvků (IP uloženo)
Datum: 26. 05. 2009 10:30

Děkujki za hezký článek, ale zase jsem tročku ztroskotal na chybě :
"System.Windows.Data Error: 43 : BindingExpression with XPath cannot bind to non-XML object.; XPath='/Players/Player' BindingExpressiontongue sticking out smileyath=; DataItem='XmlDataCollection' (HashCode=27766798); target element is 'ListView' (Name='Players'); target property is 'ItemsSource' (type 'IEnumerable') XmlDataCollection:'MS.Internal.Data.XmlDataCollection'"

Raději již uvedu svůj XAML kód :

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="Hry_Klient.Window1"
x:Name="Window"
Title="Hry.Dimenze.net"
Width="1000" Height="700" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:Hry_Klient="clr-namespace:Hry_Klient" mc:Ignorable="d"
Background="#494E48" FontFamily="./Fonts/#Ignis et Glacies Sharp" FontSize="12" d:IsStaticText="True"
>

<Window.Resources>
<Hry_Klient:ResourceKeyConverter x:Key="rsKey" />

<XmlDataProvider x:Key="ServersCS" Source="http://hry.dimenze.net/server_stats2.php?game=cs" d:IsDataSource="True"/>

<XmlDataProvider x:Key="PlayersCS1" Source="http://hry.dimenze.net/API/players_stats_cs1.php" d:IsDataSource="True" />
<XmlDataProvider x:Key="PlayersCS2" Source="http://hry.dimenze.net/API/players_stats_cs2.php" d:IsDataSource="True" />
<XmlDataProvider x:Key="PlayersCS3" Source="http://hry.dimenze.net/API/players_stats_cs3.php" d:IsDataSource="True" />
<XmlDataProvider x:Key="PlayersCS4" Source="http://hry.dimenze.net/API/players_stats_cs4.php" d:IsDataSource="True" />
<XmlDataProvider x:Key="PlayersCS5" Source="http://hry.dimenze.net/API/players_stats_cs5.php" d:IsDataSource="True" />
<XmlDataProvider x:Key="PlayersCS6" Source="http://hry.dimenze.net/API/players_stats_cs6.php" d:IsDataSource="True" />
<XmlDataProvider x:Key="PlayersCS7" Source="http://hry.dimenze.net/API/players_stats_cs7.php" d:IsDataSource="True" />
</Window.Resources>

<Grid Height="640" Width="950" Background="#494E48">
<TabControl Margin="0,0,8,68.976" IsSynchronizedWithCurrentItem="True" Background="#686A65">
<TabItem Header="Servery">
<Grid>
<ListView x:Name="Servers" SelectionChanged="ListView_SelectionChanged" Margin="8,32.647,8,0" IsSynchronizedWithCurrentItem="True" Height="223.502" VerticalAlignment="Top" SelectedValuePath="Id" FontFamily="./Fonts/#Segoe UI">
<ListView.ItemsSource>
<Binding Source="{StaticResource ServersCS}" XPath="/Servers/Server" />
</ListView.ItemsSource>

<ListView.View>
<GridView>
<GridViewColumn Header="#" Width="20" DisplayMemberBinding="{Binding XPath=Id}" />
<GridViewColumn Header="Server" Width="400" DisplayMemberBinding="{Binding XPath=Name}" />
<GridViewColumn Header="Mapa" Width="250" DisplayMemberBinding="{Binding XPath=Map}" />
<GridViewColumn Header="Hráči" Width="65" DisplayMemberBinding="{Binding XPath=Players}" />
</GridView>
</ListView.View>

</ListView>
<ListView x:Name="Players" HorizontalAlignment="Right" Margin="0,260.146,8.001,8" Width="394.012" FontFamily="./Fonts/#Segoe UI" ItemsSource="{Binding }">
<ListView.DataContext>
<MultiBinding Converter="{StaticResource rsKey}">
<MultiBinding.Bindings>
<Binding ElementName="Servers" Path="SelectedItem" />
<Binding RelativeSource="{RelativeSource AncestorType={x:Type Window}}" />
</MultiBinding.Bindings>
</MultiBinding>
</ListView.DataContext>

<ListView.View>
<GridView>
<GridViewColumn Header="Hráč" Width="180" DisplayMemberBinding="{Binding XPath=Name}" />
<GridViewColumn Header="Body" Width="50" DisplayMemberBinding="{Binding XPath=Kills}" />
<GridViewColumn Header="Čas" Width="150" DisplayMemberBinding="{Binding XPath=Time}" />
</GridView>
</ListView.View>
</ListView>
<Button HorizontalAlignment="Left" Margin="8,260.146,0,247" Name="button2" Width="114" Click="button2_Click">Obnovit</Button>
</Grid>
</TabItem>
<TabItem Header="Komunita">
<Grid>
<Label Margin="7.983,151.054,8.017,148.707" Content="V Přípravě" FontSize="72" HorizontalAlignment="Center"/>
</Grid>
</TabItem>
<TabItem Header="Web">
<Grid>
<Button Height="23.48" HorizontalAlignment="Left" Margin="8,8,0,0" x:Name="button1" VerticalAlignment="Top" Width="82" Click="button1_Click" Content="Přejít" d:LayoutOverrides="GridBox"/>
<TextBox Height="23.48" x:Name="textBox1" Margin="94,8,8,0" VerticalAlignment="Top" AcceptsReturn="True" FontSize="12" Text="http://hry.dimenze.net/" d:LayoutOverrides="GridBox" />
<WebBrowser Margin="0,45,0,8" Source="http://hry.dimenze.net/" x:Name="webBrowser1" />
</Grid>
</TabItem>
</TabControl>
</Grid>
</Window>

a v konvertoru jsem upravil jednu řádku na :
var resource = fe.TryFindResource("PlayersCS"+val.Attributes["id"].Value) as XmlDataProvider;


Nevíte kde dělám opět chybu ?

Re: [WPF][C#] Binding
Vloženo uživatelem: martin.developer - uživatel již zaslal 65 příspěvků (IP uloženo)
Datum: 26. 05. 2009 10:32

... ou ten SelectionChanged="ListView_SelectionChanged" tam již nepatří smiling smiley

Re: [WPF][C#] Binding
Vloženo uživatelem: JardaJirava (Jarda Jirava) - uživatel již zaslal 215 příspěvků (IP uloženo)
Datum: 26. 05. 2009 10:44

Ahoj,

takhle rychle prohlednuto tam nic nevidim. Co me vsak zarazi, ze to
co si vracis neni xml, resp. nema to hlavicku xml a v tom muze byt
problem. Zkus tedy poladit nastaveni serveru, nebo alespon toho php
scriptu.

Pekny den

Jarda Jirava, Microsoft MVP - Client Application, MCAD, MCPD
http://jirava.net/blog

Příspěvek zaslán emailem

Re: [WPF][C#] Binding
Vloženo uživatelem: martin.developer - uživatel již zaslal 65 příspěvků (IP uloženo)
Datum: 26. 05. 2009 10:51

Hlavičku scripty posílají : Content-Type: application/rss+xml; charset=utf-8

Re: [WPF][C#] Binding
Vloženo uživatelem: martin.developer - uživatel již zaslal 65 příspěvků (IP uloženo)
Datum: 26. 05. 2009 10:57

Tak jsem dvou scriptům změnil hlavičku (palyers_stats_cs1 a cs2.php) na Content-Type: text/xml; tedka to chybu do Outputu nepíše, ale zato se v listviewu nic nezobrazí.

Re: [WPF][C#] Binding
Vloženo uživatelem: martin.developer - uživatel již zaslal 65 příspěvků (IP uloženo)
Datum: 26. 05. 2009 11:04

Oprava tak už mi to funguje smiling smiley Stačilo změnit ItemsSource="{Binding }"> na ItemsSource="{Binding XPath=/Players/Player }.

ALe přesto bych měl další dotaz, jde udělat nějaký refresh těch zdrojů ?

Re: [WPF][C#] Binding
Vloženo uživatelem: JardaJirava (Jarda Jirava) - uživatel již zaslal 215 příspěvků (IP uloženo)
Datum: 26. 05. 2009 11:08

Ahoj,

To je tim, ze jsi tu cestu nespecifikoval u toho datoveho zdroje.
Refresh je primo metoda daneho XmlDataProvideru.

Pekny den

Jarda Jirava, Microsoft MVP - Client Application, MCAD, MCPD
http://jirava.net/blog

Příspěvek zaslán emailem

Re: [WPF][C#] Binding
Vloženo uživatelem: martin.developer - uživatel již zaslal 65 příspěvků (IP uloženo)
Datum: 26. 05. 2009 11:16

Super, mám ji. Děkuji moc za veškerou pomoc.



Vaše jméno: 
Váš e-mail: 
Předmět: 

:-)  :-(  ;)  :D  :S  spatne  dobre  bold  italic  email  citace  odkaz  obrazek 
Antispam ochrana u neregistrovaných uživatelů - opište čísla z obrázku:
  

Toto fórum je provozováno také jako emailová konference s e-mailovou adresou net [a] builder.cz.
Podrobný návod jak se k odběru zpráv e-mailem přihlásit naleznete v tomto návodu.




  



Toto je neredigovaná a nemoderovaná diskuse čtenářů serveru Builder.cz. Redakce ani provozovatel serveru za obsah jednotlivých příspěvků nenese zodpovědnost.

info@builder.cz
Vydává Grafika Publishing, s.r.o.
Copyright (c) 1997-2005 Všechna práva vyhrazena
Pro diskuzní fóra využíváme software z phorum.org