2017-01-24 3 views
0

Например, у меня есть этот классМожно ли поместить данные в элемент пользовательского интерфейса?

public class Task : DependencyObject 
    { 
     [PrimaryKey, AutoIncrement] 

     public int Id { get; set; } 
     public string TaskName { get; set; } 
     public string Description { get; set; } 
     public DateTime BeginDate { get; set; } 
     public DateTime? Duration { get; set; } 
     public bool Done { get; set; } 

    } 

И я хочу, чтобы сохранить его на экземпляре CheckBox. Можно ли сохранить его целиком или по крайней мере атрибут, где я могу поместить int?

Мне нужно это, потому что, когда флажок установлен, мне нужно знать, какой элемент был проверен.

Как я могу генерировать пользовательский интерфейс:

private void pageLoaded(object sender, RoutedEventArgs e) 
{ 
    var obj = App.Current as App; 

    var query = obj.Connection.Table<Task>(); 

    foreach (var task in query) 
    { 
     var stackLine = new StackPanel(); 
     stackLine.Orientation = Orientation.Horizontal; 
     TextBlock taskName = new TextBlock(); 
     taskName.Text = task.TaskName; 
     TextBlock taskDate = new TextBlock(); 
     taskDate.Text = " " + task.BeginDate.ToString(); 
     CheckBox taskDone = new CheckBox(); 
     taskDone.Checked += new RoutedEventHandler(taskChecked); 
     if (task.Done == true) 
      taskDone.IsChecked = true; 
     stackLine.Children.Add(taskDone); 
     stackLine.Children.Add(taskName); 
     stackLine.Children.Add(taskDate); 
     listView.Items.Add(stackLine); 
    } 
} 
+0

Вы должны прочитать о MVVM и XAML , Также решайте, работаете ли вы с WPF или UWP. Они разные. Наконец, я не могу понять, что вы пытаетесь сделать здесь. * «Мне нужно знать, какой элемент был проверен» * - какой элемент чего? Вы хотите знать, какой флажок установлен? У вас есть один флажок для «Задачи», и вы хотите узнать, какая «Задача» проверена пользователем? –

+0

@EdPlunkett Извините, я делаю uwp-приложение, но я думал, что wpf почти то же самое. Да, у меня есть флажок для каждой задачи, но я не знаю, как привязать некоторые данные к этому флажку. –

+0

Пожалуйста, покажите XAML, который вы используете, чтобы создать список задач в пользовательском интерфейсе. –

ответ

3

Вы не должны тратить время генерации пользовательского интерфейса в C#; вы должны написать его в XAML и написать viewmodel. Вы делаете все сложнее. В долгосрочной перспективе я рекомендую вам изучить так называемый «правильный путь» для работы с XAML. Это позволяет вам делать много классных вещей легко и потрясающие вещи с умеренно-невыносимой трудностью.

Но вы, вероятно, сегодня не собираетесь переписывать все свое приложение, и вы можете легко убрать то, что у вас есть, как показано ниже.

При создании CheckBox, установите его свойство Tag к Task объект, который принадлежит к нему:

CheckBox taskDone = new CheckBox(); 
taskDone.Checked += new RoutedEventHandler(taskChecked); 
// Here: 
taskDone.Tag = task; 

В методе taskChecked:

private void taskChecked(object sender, RoutedEventArgs e) 
{ 
    var cb = (CheckBox)sender; 

    // Here we get the Task back from the Tag property. 
    // Tag is type Object, so we need to cast this one too. 
    var task = (Task)cb.Tag; 

    // Do stuff with the Task 
    task.Done = cb.IsChecked; 
} 
Смежные вопросы