私はMVVMパターンが初めてです(Galasoft MVVM Lightツールキットを使用)。WCF を介してデータベースからいくつかのレコードをフェッチするテスト プロジェクトを作成しました。これは正常に機能していますが、ビューから新しいレコードを挿入できませんでした。これが私のコードです:
データベース
テーブル名: TestUser (名、姓)
WCF (NW顧客)
2 つの方法
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 プロジェクト
モデルの構成
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);
}
ビューモデル
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>
TestTable (データベース テーブル) にレコードを追加したい。レコードを挿入するにはどうすればよいですか? XAML には、2 つのテキスト ボックスとボタン コントロールが存在します。
ありがとうございます。
DG