使用mvvm light wpf针对项目列表创建动态复选框? [英] Creating a dynamic checkboxes against the list of items using mvvm light wpf?

查看:140
本文介绍了使用mvvm light wpf针对项目列表创建动态复选框?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下情况:

我有一个窗口说MainWindow,我在其中显示数据库中特定用户的活动列表.窗口上有一个按钮.通过单击该按钮,将打开一个新窗口,其中包含主表中的所有活动列表.现在,我想在第二个窗口中针对每个项目动态添加一个复选框,以便用户可以选择/取消选择活动.这些选择/取消选择的值应保存在数据库中,并且在单击完成按钮后应刷新Parent/MainWindow,更改应反映在MianWindow中.但是我没有得到如何针对每个列表项动态创建复选框并与xaml绑定并选择/取消选择该复选框的方法.

I have one window say MainWindow where I am displaying the list of activities as per the specific user from the database. There is a one button present on the window. By clicking on that button a new window is getting opened having all the list of activities from the master table. Now I want add a chechbox on the second window against each item dynamically so that user can select/deselect the activities. Those selected/deselected values should save in the database and Parent/MainWindow should refreshed after clicking on the done button and changes should reflect in the MianWindow. But I am not getting how to dynamically creating the checkboxes against each list item and binding with the xaml and select/deselect the checkbox.

请提供示例或示例.

谢谢

推荐答案

您可以使用ListView的

You can customize your listviewitem using the ListView's ItemTemplate. Add a checkbox and a textblock to a panel which would constitute your datatemplate.

更新

模型:

The Model:

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

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

}

第二个窗口中ListViewItem的ViewModel:

The ViewModel for ListViewItem in Second Window:

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; }       
}

数据访问

The DataAccess

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的ViewModel:

The ViewModel for 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:

The XAML:

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

这篇关于使用mvvm light wpf针对项目列表创建动态复选框?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆