gpt4 book ai didi

wpf - 使用 mvvm light wpf 针对项目列表创建动态复选框?

转载 作者:行者123 更新时间:2023-12-03 10:12:38 25 4
gpt4 key购买 nike

我有以下情况:

我有一个窗口说 MainWindow 我根据数据库中的特定用户显示事件列表。窗口上有一个按钮。通过单击该按钮,将打开一个新窗口,其中包含主表中的所有事件列表。现在我想在第二个窗口上动态添加一个复选框,以便用户可以选择/取消选择事件。那些选择/取消选择的值应该保存在数据库中,并且 Parent/MainWindow 在单击完成按钮后应该刷新,并且更改应该反射(reflect)在 MianWindow 中。但我不知道如何针对每个列表项动态创建复选框并与 xaml 绑定(bind)并选择/取消选择复选框。

请提供 sample 或示例。

谢谢

最佳答案

您可以使用 ListView 的 ItemTemplate 自定义您的 listviewitem .添加一个复选框
和一个文本 block 到将构成您的数据模板的面板。

更新

型号:

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:
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 的 View 模型:
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>

关于wpf - 使用 mvvm light wpf 针对项目列表创建动态复选框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3164339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com