W moim projekcie używam Silverlight5 z MVVM Pattern. Mam następujące:
View : Manager.xaml
Code-Behind : Manager.Xaml.cs
ViewModel : ManagerViewModel.cs
w moim widoku mam jedno pole tekstowe i mam przypisaną wartość jest 10.
Manager.xaml
<TextBox Name="gid" Visibility="Collapsed" />
Manager.xaml.cs
gid.Text=(((TextBlock)DG.Columns[5].GetCellContent(DG.SelectedItem)).Text);
ManageViewModel vm = DataContext as ManageViewModel;
if (vm != null)
{
vm.EditCommand.Execute();
}
ManagerViewModel.cs:
private DelegateCommand _editCommand;
public DelegateCommand EditCommand
{
get
{
if (_editCommand == null)
_editCommand = new DelegateCommand(() =>
{
**//Here i need to get the value that is assigned in the textbox.**
ANCViewModel.Show();
});
return _editCommand;
}
}
Tutaj moje pytanie jest, jak muszę uzyskać wartość, która jest przypisana w polu tekstowym z widoku do ViewModel. Jakaś pomoc..?
Odpowiedzi:
0 dla odpowiedzi № 1Jak rozumiem z twojego kodu.
ManageViewModel vm = DataContext as ManageViewModel;
twój DataContext to ManageViewModel, więc powinieneś użyć tego kontekstu ...
< TextBox Name="gid" Text={Binding MyTextPropertyInMyViewModel}
Visibility="Collapsed" why ? />
Twoje polecenie delegata również znajduje się w ViewModelu, więc możesz łatwo użyć MyTextPropertyInMyViewModel w swoim modelu widoku.
Jeśli używasz MVVM, oznacza to, że używasz DataContext (lub może to być zasób). Powinieneś używać go do źródeł elementów interfejsu użytkownika, a także do Commanding.
W ten sposób oddzielasz biznes i interfejs użytkownika. ViewModel to nasze obiekty biznesowe i możesz myśleć, że Modele są naszymi bytami.
Dlatego powinieneś używać powiązań w swoim DataContextdla twoich DataGrid, TextBlock i innych elementów wizualnych i zarządzaj swoim biznesem na swoim viewModelu. W ten sposób możesz użyć swojego modelu widoku w innym miejscu. W Twojej aplikacji mobilnej.