1

私は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

4

2 に答える 2

0

最初に xml を変更します。AS So Many Goblins said:=テキスト ボックスの Text プロパティを ViewModel の文字列プロパティにバインドする必要があります

<Grid x:Name="LayoutRoot">   <StackPanel    
                <TextBox Text="{Binding FirstName,Mode=TwoWay" />
        <TextBox Text="{Binding FirstName,Mode=TwoWay" />
                <Button Content="Add Record" Command="{Binding AddTestUserRecord}" />   </StackPanel> </Grid> 

あなたの見解では、モデルコードは次のようになります。

Private _FirstName As String    Public Property FirstName() As String
    Get
        Return _FirstName 
    End Get
    Set(ByVal value As String)
        _FirstName = value RaisePropertyChanged(FirstName)
    End Set
End Property



Private _LastName As String   Public Property LastName() As String
    Get
        Return _LastName 
    End Get
    Set(ByVal value As String)
        _LastName = value RaisePropertyChanged(LastName)
    End Set
End Property 


 Private _AddTestUserRecord As ICommand
Public Property AddTestUserRecord() As ICommand
    Get
        If _AddTestUserRecordIs Nothing Then
            _AddTestUserRecord= New RelayCommand(Nothing, AddressOf AddUser)
        End If
        Return _rad_Map_Loaded
    End Get
    Set(ByVal value As ICommand)
        _AddTestUserRecord= value
    End Set
End Property

Public Sub AddUser()
   Try

Using db As New DBDataContext()
    Dim test As New TestUser() With { _
        Key .FirstName = me.FirstName, _
        Key .LastName = me.LastName _
    }
    db.TestUser.InsertOnSubmit(test)
    db.SubmitChanges()
End Using Catch ex As Exception     Return False  End Try    End Sub

コードは適切にフォーマットされておらず、VB でもありますが、何をしなければならないかについての公正なアイデアを提供します。

于 2013-09-01T06:27:17.487 に答える
0

テキスト ボックスの Text プロパティを ViewModel の文字列プロパティにバインドする必要があります。AddTestUserRecord コマンドの「execute」メソッドが呼び出されたときに、プロパティをフェッチし、ロジックを呼び出して値をデータベースに挿入するだけです。

于 2011-09-16T20:22:21.497 に答える