2010-07-02 92 views
3

我有以下場景:使用mvvm light wpf針對項目列表創建動態複選框?

我有一個窗口說MainWindow,我顯示活動列表根據數據庫中的特定用戶。窗戶上有一個按鈕。通過點擊該按鈕,打開一個新窗口,其中包含主表中的所有活動列表。現在我想在第二個窗口上動態添加一個chechbox,以便用戶可以選擇/取消選擇活動。這些選定/取消選擇的值應該保存在數據庫中,並且在點擊完成按鈕後應刷新Parent/MainWindow,並且更改應該反映在MianWindow中。但我沒有得到如何針對每個列表項目動態創建複選框並使用xaml進行綁定,並選擇/取消選中複選框。

與樣品或示例請建議。

感謝

+0

檢查我更新的答案。你可以編輯你的問題,而不是產生一個實際上不是的答案。 – Amsakanna 2010-07-07 12:15:59

回答

3

您可以自定義使用ListView的ItemTemplate您的ListViewItem。將一個複選框 和一個文本塊添加到可構成您的數據模板的面板中。

更新

的型號:

public class Activity 
{   
    public Activity(int id, string name) 
    { 
     ID = id; 
     Name = name;   
    } 

    public int ID { get; set; } 
    public string Name { get; set; }  

} 

視圖模型爲ListViewItem的在第二個窗口:

public class ActivityViewModel 
{ 
    Activity _model; 

    public ActivityViewModel(Activity model, bool isSelected) 
    { 
     _model = model; 
     IsSelected = isSelected; 
    }   

    public string Name { get { return _model.Name; } } 

    /* Since the view has a checkbox and it requires a bool value for binding 
     we create this property */ 
    public Nullable<bool> IsSelected { get; set; }  
} 

的數據訪問

public class DaoDailyActivities 
{ 
    string activityName = ""; 
    bool IsSelected; 

    SqlConnection con = new SqlConnection("server=172.16.32.68;database=ParentalHealth;uid=sa;pwd=Emids123"); 

    public IEnumerable<Activity> GetActivities() 
    { 
     SqlCommand cmd = new SqlCommand("SP_GetActivities", con); 
     cmd.CommandType = CommandType.StoredProcedure; 
     con.Open(); /* It is safe to open connections in a try block */ 

     SqlDataReader readerActivities = cmd.ExecuteReader(); 
     while (readerActivities.Read()) 
     {   
      yield new Activity(readerActivities["ActivityID"].ToString(), readerActivities["ActivityName"].ToString());    
     } 
    }   
} 

的視圖模型爲SecondWindow:

public class SecondWindowViewModel : ViewModelBase 
{ 
    DaoDailyActivities _rep = new DaoDailyActivities(); 

    public ObservableCollection<ActivityViewModel> AllActivities { get; set; } 

    public SecondWindowViewModel() 
    { 
     LoadAllActivities(); 
    } 

    LoadAllActivities() 
    { 
     foreach(Activity activity in _rep.GetActivities()) 
     { 
      AllActivities.Add(new ActivityViewModel(activity, (activity.ID % 2 == 0))); 
     } 
    } 
} 

的XAML:

<ListView ItemsSource="{Binding AllActivities}"> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <StackPanel> 
     <TextBlock Text="{Binding Path=Name}" /> 
     <CheckBox IsChecked="{Binding Path=IsSelected}" /> 
     </StackPanel> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListView> 
+0

感謝您的回覆。我已經做到了。值隨複選框一起提供。值來自數據庫,複選框是動態創建的。現在我想根據表格值預先選中複選框。怎麼做。我正在返回列表。 感謝 – Tarun 2010-07-02 13:47:43

+0

@Tarun:您可以將值綁定到使用轉換器-HTTP的複選框://msdn.microsoft.com/en-us/library/system.windows.data.binding.converter.aspx。向我發送一份List數據樣本。 – Amsakanna 2010-07-05 10:47:36

+0

嗨德維爾, 我有一個主窗口,在這裏我展示每個具體的用戶活動ASP列表。有一個按鈕可以在現有列表中添加新活動。通過單擊Add NewActivities按鈕,將打開一個新窗口,顯示整個列表以及具有預選複選框的特定用戶活動。我想根據數據庫值預先選擇值。 主窗口: 慢跑 運行 添加新的活動窗口: 慢跑複選框 運行復選框 午睡 請推薦? – Tarun 2010-07-06 05:19:08