Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
Mvvm delucidazione
mercoledì 29 giugno 2011 - 10.02
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
brux88
Profilo
| Newbie
24
messaggi | Data Invio:
mer 29 giu 2011 - 10:02
ciaoooo sono di nuovo qua =) , sto iniziando a studiare un po di model view view model, vi spiego il mio dubbio, ho un form wpf con una grid dove all'interno c sono delle textbox(una semplice anagarfica clienti), all'inetrno del progetto ho creato una classe clientiviewmodel dove sto inserendo tutta la logic business, per quanto riguarda il salvataggio mi funziona e il caricamento del primo cliente pure, pero quando cerco di fare una ricerca tramite una textbox dove inserisco l'id del cliente se faccio il debug vedo che mi carica il cliente giusto ma non capisco perche non mi aggiorna l'interfaccia utente vi posto il codice xaml della grid:
<Grid Grid.Row="2" HorizontalAlignment="Left" Margin="54,15,0,0" Name="clientiDataGrid" VerticalAlignment="Top" Height="155" Width="408" DataContext="{Binding rb3}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2" />
<ColumnDefinition Width="20" />
<ColumnDefinition Width="31" />
<ColumnDefinition Width="47*" />
<ColumnDefinition Width="116*" />
<ColumnDefinition Width="192*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Label Content="rscli:" HorizontalAlignment="Left" Margin="1,3,0,3" VerticalAlignment="Center" Grid.ColumnSpan="2" Grid.Column="1" />
<TextBox Grid.Column="3" Height="23" HorizontalAlignment="Left" Margin="3,3,0,3" Name="rscliTextBox" Text="{Binding Path=rscli, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true}" VerticalAlignment="Center" Width="120" Grid.ColumnSpan="2" DataContext="{Binding}" />
<Label Content="rscli 2:" Grid.Row="1" HorizontalAlignment="Left" Margin="1,3,0,3" VerticalAlignment="Center" Grid.ColumnSpan="2" Grid.Column="1" />
<TextBox Grid.Column="3" Grid.Row="1" Height="23" HorizontalAlignment="Left" Margin="3,3,0,3" Name="rscli2TextBox" Text="{Binding Path=rscli2, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true}" VerticalAlignment="Center" Width="120" Grid.ColumnSpan="2" DataContext="{Binding}" TextChanged="rscli2TextBox_TextChanged" />
<Label Content="telecli:" Grid.Row="2" HorizontalAlignment="Left" Margin="1,3,0,3" VerticalAlignment="Center" Grid.ColumnSpan="2" Grid.Column="1" />
<TextBox Grid.Column="3" Grid.Row="2" Height="23" HorizontalAlignment="Left" Margin="3,3,0,3" Name="telecliTextBox" Text="{Binding Path=telecli, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true}" VerticalAlignment="Center" Width="120" Grid.ColumnSpan="2" DataContext="{Binding}" />
<Label Content="indcli:" Grid.Row="3" HorizontalAlignment="Left" Margin="1,3,0,3" VerticalAlignment="Center" Grid.ColumnSpan="2" Grid.Column="1" />
<TextBox Grid.Column="3" Grid.Row="3" Height="23" HorizontalAlignment="Left" Margin="3,3,0,3" Name="indcliTextBox" Text="{Binding Path=indcli, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true}" VerticalAlignment="Center" Width="120" Grid.ColumnSpan="2" DataContext="{Binding}" />
<Label Content="comcli:" Grid.Row="4" HorizontalAlignment="Left" Margin="1,3,0,3" VerticalAlignment="Center" Grid.ColumnSpan="2" Grid.Column="1" />
<TextBox Grid.Column="3" Grid.Row="4" Height="23" HorizontalAlignment="Left" Margin="3,3,0,3" Name="comcliTextBox" Text="{Binding Path=comcli, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true}" VerticalAlignment="Center" Width="120" Grid.ColumnSpan="2" DataContext="{Binding}" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="91,6,0,3" Name="idclitxt" Text="{Binding Path=idcli, Mode=TwoWay, ValidatesOnExceptions=true, NotifyOnValidationError=true}" VerticalAlignment="Center" Width="35" IsEnabled="False" DataContext="{Binding}" Grid.Column="5" />
</Grid>
<Label Content="rscli:" Grid.Row="1" HorizontalAlignment="Left" Margin="342,26,0,49" VerticalAlignment="Center" />
<Button Content="Ricerca 2" Grid.Row="1" HorizontalAlignment="Right" Margin="0,33,239,12" Name="btnRicerca2" Width="58" />
<TextBox Grid.Row="1" Height="27" HorizontalAlignment="Left" Margin="71,34,0,0" Name="txtric2" VerticalAlignment="Top" Width="121" />
<Label Content="Ric.xNome" Grid.Row="1" Height="28" HorizontalAlignment="Left" Margin="12,34,0,0" Name="label2" VerticalAlignment="Top" />
</Grid>
mentre il metodo ricerca che e inserito nella classe clientviewmodel è il seguente:
public string ricerca { get; set; }
public void ricerca2()
{
//ricerca per id
try
{
int ric =Convert.ToInt32(this.ricerca);
clienti loadedLog = db.clienti.Where(ent => ent.idcli == ric).First();
idtest = loadedLog.idcli;
this.rb3 = loadedLog;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
freeteo
Profilo
| Guru
6.542
messaggi | Data Invio:
mer 29 giu 2011 - 12:30
Ciao brux88,
mi sa che ti ho risposto anche in qualche altro thread...
tipo questo:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=39473
Cmq la tua griglia non si aggiorna perchè nessuno le dice di farlo, ossia il suo "DataContext" non scatena l'evento PropertyChanged, ovvero non implementa INotifyPropertyChanged e di conseguenza non scatena l'evento sul "set" della proprietà che gli dai come DataContext (oppure ItemsSource a seconda) di un controllo grafico della UI.
Se guardi l'esempio che ti ho allegato in un thread precedente vedi proprio che nel set della proprietà scatena l'evento chiamando "RaiseChanged("...nome..."))...prova a guardare in dettaglio, perchè è questo che ti manca per farlo funzionare come vorresti...
Ciao.
Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo
brux88
Profilo
| Newbie
24
messaggi | Data Invio:
mer 29 giu 2011 - 13:13
si hai ragione pero mi sembrava che ormai l'entity sapeva in automatico uando stavo modifciando o inserendo CIOè NEL CODICE CHE HO POSTATO SE VEDO IL DEBUG IN RB3 CI STA IL CLIENTE QUELLO CHE HO APPENA RICERCATO PERO COME FACCIO a farlo vedere nelle textbox visto che quest ultime gia sono associate alle varie proprieta tramite binding?
freeteo
Profilo
| Guru
6.542
messaggi | Data Invio:
gio 30 giu 2011 - 09:39
Ciao,
bisognerebbe fare un po' di esempi sul tuo codice, impostando in maniera pulita...ma se vuoi provare in velocità, prova ad impostare this.rb3 = null e poi this.rb3 = loadedLog e vedi se ti refresha i controlli.
Ciao.
Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo
brux88
Profilo
| Newbie
24
messaggi | Data Invio:
gio 30 giu 2011 - 09:44
il mio problema sta prorpio qua cie se vedo il debug passo passo ,mi accorgo che quando faccio la ricerca in loadlog c'è il cliente appena ricercato e quando faccio this.rb3 = loadlog i this.rb3 ce il cliente appena ricercato ma a video non me lo cambia =(
freeteo
Profilo
| Guru
6.542
messaggi | Data Invio:
gio 30 giu 2011 - 10:05
Ciao,
mi sa che ti mancano alcune basi, ti ho provato a dare dei dettagli aggiuntivi qui:
http://www.dotnethell.it/forum/messages.aspx?ThreadID=39444
vedi se ti possono essere utili, cmq rimane il fatto di non avere aperti 100 thread sulla stessa cosa, decidiamone uno e continiuamo su quello
Ciao.
Matteo Raumer
[MCAD .net, MVP Visual C#]
http://blogs.dotnethell.it/freeteo
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !