How do I Insert Record MVVM through WCF
- by DG KOL
Hello,
I’m new in MVVM Pattern (Using Galasoft MVVM Light toolkit). I’ve created a Test Project where I want to fetch some records from Database through WCF. This is working fine but I’ve failed to insert new record from View; Here is My Code:
Database
Table Name: TestUser (First Name, LastName)
WCF (NWCustomer)
Two Methods
Public List<TestUser> GetAllUsers() [“LINQ2SQL Operation”]
Public bool AddUser(TestUser testuser)
Public bool AddUser(TestUser testuser)
{
try
{
using (DBDataContext db = new DBDataContext())
{
TestUser test = new TestUser()
{
FirstName = testuser.FirstName,
LastName = testuser.LastName
};
db.TestUser.InsertOnSubmit(test);
db.SubmitChanges();
}
}
catch (Exception ex)
{
return false;
}
return true;
}
Silverlight Project
MODEL consists
ITestUserService.cs
TestUserService.cs
public void AddTestTable(TestTableViewModel testuser, Action<bool> callback)
{
NWCustomerClient client = new NWCustomerClient("BasicHttpBinding_NWCustomer");
client.AddTestUserCompleted += (s, e) =>
{
var userCallback = e.UserState as Action<bool>;
if (userCallback == null)
{
return;
}
if (e.Error == null)
{
userCallback(e.Result);
return;
}
userCallback(false);
};
client.AddTestUserAsync(testuser.Model);
}
VIEWMODEL
TestUserViewModel
public TestUser User
{
get;
private set;
}
public const string DirtyVisibilityPropertyName = "DirtyVisibility";
private Visibility _dirty = Visibility.Collapsed;
public Visibility DirtyVisibility
{
get
{
return _dirty;
}
set
{
if (_dirty == value)
{
return;
}
_dirty = value;
RaisePropertyChanged(DirtyVisibilityPropertyName);
}
}
public TestUserViewModel (TestUser user)
{
User = user;
user.PropertyChanged += (s, e) =>
{
DirtyVisibility = Visibility.Visible;
};
}
MainViewModel
public ObservableCollection<TestUserViewModel> TestTables
{
get;
private set;
}
public const string ErrorMessagePropertyName = "ErrorMessage";
private string _errorMessage = string.Empty;
public string ErrorMessage
{
get
{
return _errorMessage;
}
set
{
if (_errorMessage == value)
{
return;
}
_errorMessage = value;
RaisePropertyChanged(ErrorMessagePropertyName);
}
}
private ITestUserService _service;
public RelayCommand< TestUserViewModel> AddTestUserRecord
{
get;
private set;
}
public MainTestTableViewModel (ICustomerService service)
{
_service = service;
TestTables = new ObservableCollection<TestTableViewModel>();
service.GetAllTestTable(HandleResult);
}
private void HandleResult(IEnumerable<TestTable> result, Exception ex)
{
TestTables.Clear();
if (ex != null)
{
//Error
return;
}
if (result == null)
{
return;
}
foreach (var test in result)
{
var table = new TestTableViewModel(test);
TestTables.Add(table);
}
}
XAML
<Grid x:Name="LayoutRoot">
<StackPanel>
<TextBox Text="FirstName" />
<TextBox Text="LastName" />
<Button Content="Add Record" Command="{Binding AddTestUserRecord}" />
</StackPanel>
</Grid>
I want to add records into TestTable (Database Table). How do I insert record? In XAML two text box and a button control is present.
Thanking you.
DG