Как получить доступ к значению текстового поля в viewmodel в шаблоне MVVM? Мой код выглядит следующим образом
Я новичок в MVVM, моя проблема в том, что я не могу получить доступ к значению текстового поля MainWindow(View) в ViewModel.
Что я уже пробовал:
Это свойства модели
<pre> public class ModelEntity:INotifyPropertyChanged { public ModelEntity() { } private string _firstname; private string _lastName; private string _address; private string _contact; private string _dedscription; public string FirstName { get { return _firstname; } set { _firstname = value;OnPropertyChanged("FirstName"); } } public string LastName { get { return _lastName; } set { _lastName = value; OnPropertyChanged("LastName"); } } public string Address { get { return _address; } set { _address = value; OnPropertyChanged("Address"); } } public string Contact { get { return _contact; } set { _contact = value; OnPropertyChanged("Contact"); } } public string Description { get { return _dedscription; } set { _dedscription = value; OnPropertyChanged("Description"); } } public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged(string PropertyName) { if(PropertyChanged!=null) { PropertyChanged(this, new PropertyChangedEventArgs(PropertyName)); } } }
Ниже приведен код ViewModel
public class ViewModel { MyDemoServiceReference.ModelEntity objentity; public ObservableCollection<Model.ModelEntity> obsColl { get; set; } MyDemoServiceReference.MyDemoServiceClient objservice = new MyDemoServiceReference.MyDemoServiceClient(); public ModelEntity objmodel { get; set; } public ViewModel() { // obsColl = new ObservableCollection<ModelEntity>(); // objentity = new MyDemoServiceReference.ModelEntity(); objmodel = new ModelEntity(); AddUser = new RelayCommand(SaveData); } public RelayCommand AddUser { get; set; } public RelayCommand UpdateUser { get; set; } void SaveData(object parameter) { // ModelEntity objmodel = new ModelEntity(); // MyDemoServiceReference.ModelEntity objentity = new MyDemoServiceReference.ModelEntity(); objentity.FirstName = objmodel.FirstName; if (objservice.SaveData(objentity)) MessageBox.Show("Data Inserted"); else MessageBox.Show("Data Not Inserted"); } }
Ниже приведен код Xmal
<Window x:Class="WPFDemo.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:Model="clr-namespace:WPFDemo.Model" xmlns:viewmodel="clr-namespace:WPFDemo.ViewModel" mc:Ignorable="d" Title="MainWindow" Height="350" Width="525"> <Border Background="Chocolate" BorderThickness="1"> <Grid> <Grid.RowDefinitions> <RowDefinition/> <RowDefinition/> <RowDefinition/> <RowDefinition/> <RowDefinition/> <RowDefinition/> </Grid.RowDefinitions> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> <TextBox Grid.Row="0" Height="50" Width="150" Text="{Binding ModelEntity.FirstName ,Mode=TwoWay}" Grid.Column="1"></TextBox> <TextBox Grid.Row="1" Height="50" Width="150" Text="{Binding ModelEntity.LastName,Mode=TwoWay}" Grid.Column="1"></TextBox> <TextBox Grid.Row="2" Height="50" Width="150" Text="{Binding ModelEntity.Address,Mode=TwoWay}" Grid.Column="1"></TextBox> <TextBox Grid.Row="3" Height="50" Width="150" Text="{Binding ModelEntity.Contact,Mode=TwoWay}" Grid.Column="1"></TextBox> <TextBox Grid.Row="4" Height="50" Width="150" Text="{Binding ModelEntity.Description,Mode=TwoWay}" Grid.Column="1"></TextBox> <Label Grid.Row="0" Height="50" Width="150" Content="FirstName" Grid.Column="0"></Label> <Label Grid.Row="1" Height="50" Width="150" Content="LastName" Grid.Column="0"></Label> <Label Grid.Row="2" Height="50" Width="150" Content="Address" Grid.Column="0"></Label> <Label Grid.Row="3" Height="50" Width="150" Content="Contact" Grid.Column="0"></Label> <Label Grid.Row="4" Height="50" Width="150" Content="Description" Grid.Column="0"></Label> <Button Content="Save" Grid.Row="5" Grid.Column="2" Command="{Binding Path=AddUser}" Height="50" Width="100"></Button> </Grid> </Border> </Window>
Kenneth Haugland
Я ослеп, или вы забыли установить DataContext?
Member 10310320
Вот он
пространство имен WPFDemo
{
/// & lt;резюме>
/// Логика взаимодействия для MainWindow. xaml
///
публичный частичный класс MainWindow: Window
{
публичное главное окно()
{
метод InitializeComponent();
этот.DataContext = новая модель представления.модель представления();
}
}
}
Kenneth Haugland
Что ж, это верно,но на что вы здесь жалуетесь? Обычно я бы отправил некоторые командные параметры с нажатием кнопки, это то, о чем вы спрашиваете?
Member 10310320
В этой функции
void SaveData(параметр объекта)
{
// ModelEntity objmodel = новая модель();
// MyDemoServiceReference.ModelEntity objectity = новый MyDemoServiceReference.Модельность();
объективность.Имя = objmodel.имя;
if (objservice.SaveData(objectity))
Ящик для сообщений.Показать("Сведения Вставлен");
ещё
Ящик для сообщений.Show ("Данные Не Вставлены");
}
Я не получаю значение текстового поля, то есть имя
или различный контроль также
#realJSOP
Серьезно? Вы проголосовали против единственного ответа, который вы получили до сих пор от кого-то с большим опытом работы в WPF, чем у вас в отрасли?
Member 10310320
Он просто объяснил новый подход. Но моя проблема остается прежней.