2015-07-08 4 views
-1

В MyViewModel У меня есть свойство string (SearchBox), которое привязано к текстовому полю в моем представлении. Когда я нажимаю кнопку searchbutton, команда посылает мне свой класс datalayer, чтобы получить результат поиска (изображений) с дБ.Передача строки другому классу

Моя проблема заключается в том, как передать строку из searchBox вместе с методом, который будет использоваться в классе datalayer.

public class MyViewModel : NotifyUIBase 
{ 
    private string _searchBox; 
    public string SearchBox // the Name property 
    { 
     get { return this._searchBox; } 
     set { this._searchBox = value; RaisePropertyChanged(); } 
    } 

    public MyViewModel() 
    { 
     FindImageCommand = new RelayCommand(FindImage); 
    } 

    public RelayCommand FindImageCommand { get; private set; } 
    private void FindImage() 
    { 
     var dbFunctions = new DatabaseFunctions(); 
     FindVisualReferences = dbFunctions.FindVisualReferences(); 
    } 
} 

В классе DataLayer мне нужно использовать строку из SearchBox в запросе для поиска дБ.

public class DataLayer 
{ 

    public ObservableCollection<Image> FindVisualReferences() 
    { 
     var FindVisualReferences = new ObservableCollection<Image>(); 

     String dbConnectionString = @"Data Source =mydB.sqlite"; 

     SQLiteConnection cnn = new SQLiteConnection(dbConnectionString); 
     cnn.Open(); 

====> string Query = "Select* from images where title = '" + SearchBox.ToUpper() + "'"; 

     SQLiteDataAdapter sda = new SQLiteDataAdapter(Query, cnn); 
     DataTable dt = new DataTable(); 
     sda.Fill(dt); 

     // rest of dB method 
    } 
} 

Как получить строку из SearchBox в MyViewModel в запросе для поиска в базе данных в DataLayer классе?

+1

Пожалуйста, объясните, что вы пробовали, что это такое и как оно отличается от того, что вы хотели этого сделать. Обязательно укажите [хороший, _minimal_, _complete_ пример кода] (https://stackoverflow.com/help/mcve), иллюстрирующий все это. В частности, пожалуйста, объясните, почему вы не можете просто передать значение методу «FindVisualReferences()», как это обычно бывает, когда они хотят, чтобы какой-либо метод вызывался, чтобы иметь доступ к определенному ему определенному значению. –

+2

Как @PeterDuniho сказал, просто перейдите dbFunctions.FindVisualReferences (SearchBox). Также не заключайте запрос sql, как это, он открывает его для SQL-инъекции. Используйте параметры! Используйте SQLiteCommand и добавьте параметры. – Floris

ответ

0

Во-первых, изменить способ взять в струнной параметра Я:

public ObservableCollection<Image> FindVisualReferences(string search) 

Теперь, вы можете просто передать в SearchBox строке при вызове этого метода, например, так:

FindVisualReferences = dbFunctions.FindVisualReferences(SearchBox); 

You может затем переписать запрос для ссылки на параметр, например:

string Query = "Select* from images where title = '" + search.ToUpper() + "'"; 

Теперь @Flo ris сделал хороший смысл использовать параметры вместо конкатенации строк, я бы порекомендовал посмотреть на this, как уже было сказано.