2014-11-03 2 views
1

저는 WPF 용 MVVM Light를 처음 사용합니다. VIsual Studio 2013을 사용 중이며 C#을 사용하여 프로젝트를 만들었습니다. xaml에있는 버튼에 대한 논리가 있습니다. 사용자가이 버튼을 클릭하면 앱이 데이터베이스와 데이터 테이블을 생성하고 싶습니다. 나는 중계 명령을 발사 할 xaml에 구속력있는 명령을 가지고있다. 또한 모델에 데이터베이스와 데이터 테이블을 생성하는 메소드가 있습니다. 뷰 모델에서 릴레이 명령을 만들었지 만 그 외에는 다음에 무엇을해야할지 잘 모르겠습니다. 어떤 도움을 주시면 감사하겠습니다.MVVM Light에서 논리를 수행해야합니다. 데이터베이스를 생성하기 위해 버튼을 누르십시오.

보기 - XAML

<Button Content="New Project" Margin="0,0,3,0" Command="{Binding AddProjectCommand}" IsEnabled="{Binding CommNotStreaming}" Grid.Column="2" Grid.Row="0"/> 

보기 모델 -

public class ProjectConfigViewModel : ViewModelBase 
{ 
    //Binding AddProjectCommand 
    public RelayCommand AddProjectCommand { get; set; } 


    private string consoleText { get; set; } 
    private StringBuilder consoleBuilder = new StringBuilder(360); 

    public ProjectConfigViewModel() 
    { 
     this.AddProjectCommand = new RelayCommand(this.AddProject); 

    } 

    public void AddProject() 
    { 
      //Not really sure what to do here to call the ProjectDbInteraction class 

    } 

}  

모델 - 데이터베이스 상호 작용 클래스

public class ProjectDbInteraction 
{ 
    //String rawDBConnectionString = "Server=localhost; Database=12_rse_002_db; uid=root; pwd=password; Connection Timeout=5;"; //TODO Either pick a standard for make this edittable 

    public void CreateProjectDb(string projName) 
    { 
     try 
     { 
      MySqlConnection connection = new MySqlConnection("DataSource=localhost;UserId=root;pwd=password"); 
      MySqlCommand command = new MySqlCommand("CREATE DATABASE " + projName + ";", connection); 
      connection.Open(); 
      command.CommandText = "DROP DATABASE IF EXISTS " + projName; 
      command.ExecuteNonQuery(); 
      command.CommandText = "CREATE TABLE Projects(ProjectID INT NOT NULL, ProjectName VARCHAR(VARCHAR(255), ProjectStartDate DateTime, ProjectEndDate DateTime, ProjectNotes VARCHAR(MAX) PRIMARY KEY (ProjectID))"; 
      command.ExecuteNonQuery(); 
      //command.CommandText = "CREATE TABLE Metabolites(MetaboliteID VARCHAR(10) NOT NULL, Metabolite_Name VARCHAR(45) NULL, ReactionTime INT NULL, PRIMARY KEY (MetaboliteID)"; 
      connection.Close(); 
     } 
     catch (Exception) 
     { 

     } 
    } 


    public event PropertyChangedEventHandler PropertyChanged; 
    private void NotifyPropertyChanged(String propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

답변

1

시작

this.AddProjectCommand = new RelayCommand(this.AddProject); 
을 대체하여

this.AddProjectCommand=new RelayCommand(() => AddProject()); 

.

그런 다음 데이터베이스 생성, 같은 호출하여 AddProject() 메소드의 : 일

ProjectDbInteraction.CreateProjectDb("some name"); 
+1

감사합니다. 나는 테오도시우스에게 감사한다. – yams