2016-04-19 9 views
1

Ich habe eine wpf C# app. Ich versuche MVVM zu implementieren.Meine Doppelklick-Bindung funktioniert nicht

Ich habe ein Raster und ich bevölkere es mit Daten.

Nach dem Doppelklicken des Benutzers Ich möchte die Zeile der Daten ausgewählt werden.

Aber es trifft meinen Code nicht.

Meine OnPropertyChamged-Methode wird nicht getroffen.

Ich habe Probleme, diese Konzepte zu lernen.

kann jemand bitte meinen Fehler aufzeigen?

dank

Meine Aufschlags:

<DataGrid Name="dgJobs" ItemsSource="{Binding}" AutoGenerateColumns="False" SelectionMode="Single" > 
    <DataGrid.InputBindings> 
     <MouseBinding MouseAction="LeftDoubleClick" 
      Command="{Binding Path=JobSearchCommand}" 
      CommandParameter="{Binding ElementName=dgJobs,   
     Path=SelectedItem}"/> 
    </DataGrid.InputBindings> 
</DataGrid> 

meinen Code hinter dieser Aufschlags:

public ucJobSearch() 
{ 
    InitializeComponent(); 
    for (int index = 0; index < 300; index++) 
    { 
     ActiveState.JobSearchResults.Add(new CustomerJobs() 
     { 
      Add1 = "Add" + index.ToString(), 
      FName = "Fname" + index.ToString(), 
      SName = "Sname" + index.ToString(), 
      Email = "Email" + index.ToString(), 
      JobStatus = JobStatus.New 
     }); 
    } 
    dgJobs.ItemsSource = ActiveState.JobSearchResults; 

    this.DataContext =new JobSearch(); 
} 

mein Modell:

public class CustomerJobs 
{ 
    public int JobId { get; set; }  
    public string CustomerRef { get; set; } 
    public string DateReq { get; set; }  
    public string JobRef { get; set; }  
    public JobStatus JobStatus { get; set; } 
    public int CustomerId { get; set; } 
    public string SName { get; set; } 
    public string FName { get; set; } 
    public string Add1 { get; set; } 
    public string Town { get; set; } 
    public string DOE { get; set; } 
    public string Email { get; set; } 
} 

Meine Viewmodel:

public class JobSearch : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    public void OnPropertyChanged(string property) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(property)); 
     } 
    } 
} 

Mein Helfer:

public class JobSearchCommand : ICommand 
{ 
    public event EventHandler CanExecuteChanged 
    { 
     add { CommandManager.RequerySuggested += value; } 
     remove { CommandManager.RequerySuggested -= value; } 
    } 

    public bool CanExecute(object parameter) 
    { 
     return true; 
    } 

    public void Execute(object parameter) 
    { 
     var job = parameter as CustomerJobs; 
     var x = job.FName; 
    } 
} 
+3

Ich denke, Sie müssen eine Eigenschaft des Typs JobSearchCommand im Ansichtsmodell haben und dann in XAML daran binden. Hier ist ein gutes Tutorial http://www.blackwasp.co.uk/WPFMouseBindings.aspx – chameleon86

+0

@ chameleon86 Hallo, danke. kannst du mir bitte eine Antwort geben, die den Code zeigt? –

+0

Sie verwenden {Binding} als ItemSource auf dem XAML, daher wird das neue JobSearch() als ItemSource verwendet (da Sie es als Datenkontext festlegen), aber Sie überschreiben die Bindung mit einer Zuweisung = ActiveState.JobSearchResults. Was sollte der Datenkontext sein? versuchen Sie das zu beheben und sehen Sie, ob sich etwas ändert. – KinSlayerUY

Antwort

1

Sie benötigen eine Eigenschaft vom Typ JobSearchCommand in dem View-Modell haben, und dann, um es in XAML zu binden. Sie können Ihre Ansichtsmodell-Klasse wie folgt ändern:

Verwandte Themen