ModelleWie fügt man Textfeldwerte hinzu, die mit MVVM aufgelistet werden?
public class EmployeeDetails
{
public string Name { get; set; }
public int Age {get;set;}
}
public class AddressDetails
{
public EmployeeDetails EmployeeName { get; set; }
public string City { get; set; }
}
Ansicht
<Window x:Class="ClassCollection.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:local="clr-namespace:ClassCollection"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525"
DataContext="{Binding Source={StaticResource loc},Path=ViewModel}"
>
<Grid>
<StackPanel Margin="0 20 0 0">
<TextBox x:Name="txt1" Width="90" Height="20" Text="{Binding Details.EmployeeName}"/>
<TextBox x:Name="txt2" Width="90" Height="20" Text="{Binding Details.City}" Margin="0 20 0 0"/>
</StackPanel>
<Button x:Name="btn" Width="90" Height="25" Content="Add" Command=" {Binding AddCommand}"/>
</Grid>
</Window>
Ansichtsmodell
public class Viewmodel
{
public ObservableCollection<AddressDetails> EmployeeList;
public Viewmodel()
{
EmployeeList = new ObservableCollection<AddressDetails>();
LoadCommand();
}
private AddressDetails _details;
public AddressDetails Details
{
get { return _details; }
set
{
_details = value;
}
}
// Commands
public ICommand AddCommand { get; set; }
private void LoadCommand()
{
AddCommand = new CustomCommand(Add, CanAdd);
}
private bool CanAdd(object obj)
{
return true;
}
private void Add(object obj)
{
EmployeeList.Add(new AddressDetails { EmployeeName = Details.EmployeeName, City = Details.City });
}
}
Locator
public class Locator
{
private static Viewmodel viewmodel = new Viewmodel();
public static Viewmodel ViewModel
{
get { return viewmodel; }
}
}
Wie TextBox
v hinzufügen Wie wäre es mit einer Sammelliste mit MVVM?
Das obige ist mein Code, den ich ausprobiert habe. Es zeigt Null Referenz Ausnahme, wenn ich oben mag. Was wäre das Problem?
aktualisieren
Ich habe zwei Felder in EmployeeDetails
Klasse. Also muss ich für diese zwei Felder Eingabe geben, wenn sie zur Sammlung hinzugefügt werden. Aber ich brauche nur ein Feld Name
in die Sammlung einzufügen. Wie es geht?
Verwenden Sie den Debugger, Code für Schritt durch. Dann können Sie sehen, welche spezifische Zeile die NullReferenceException auslöst. Wie für Ihren Code implementieren Sie INotifyPropertyChanged überall? Andernfalls wird Ihre View nicht über Änderungen an der Observable Collection benachrichtigt. – Fang
Es scheint statt der 'Text = "{Binding Details.EmployeeName}"' Bindung die 'Text =" {Binding Details.EmployeeName.Name} "-Bindung zu verwenden. –
Könnten Sie bitte den entsprechenden Code oder Pseudocode posten, um dies zu illustrieren: «Also muss ich die Eingabe für diese beiden Felder eingeben, wenn sie der Sammlung hinzugefügt werden. Aber ich brauche nur einen Feldnamen, um ihn in die Sammlung einzufügen. »? –