sl中双向绑定刷新问题

ftlovexg 2011-05-23 09:53:55
在sl里,gridview控件中,有一checkbox列,每一行开始都是一个checkbox。我想实现一个多选,然后让前面对应的checkbox自动勾选的东西,结果失败。。
注:isCheckedUsers 对象是代码对应的数据源,Binding isChecked是对象中的属性(bool)。如下:

<datagrid:DataGrid x:Name="gridUsers" AutoGenerateColumns="False" HorizontalAlignment="Left" Height="282" FrozenColumnCount="4" KeyDown="gridUsers_KeyDown" SelectionChanged="gridUsers_SelectionChanged">

<datagrid:DataGrid.Columns>
<!--选择-->
<datagrid:DataGridTemplateColumn Header="选择">
<datagrid:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding isChecked, Mode=TwoWay}" HorizontalAlignment="Center" VerticalAlignment="Center"></CheckBox>
</DataTemplate>
</datagrid:DataGridTemplateColumn.CellTemplate>
</datagrid:DataGridTemplateColumn>




我是在SelectionChanged事件下做的。下面是对应代码:

void gridUsers_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
string showMessage = "";
if (gridUsers.SelectedItems.Count > 1)
{
foreach (isCheckedUsers dd in this.gridUsers.SelectedItems)
{
dd.isChecked = true;
}
}
}

问题来了,更新完数据源,如何能让页面的checkedbox马上勾选呢,也就是自动刷新。谢谢各位大虾。
...全文
315 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
vbnet_yan 2011-07-09
  • 打赏
  • 举报
回复
顶顶更健康!
ftlovexg 2011-05-24
  • 打赏
  • 举报
回复
使用这个方法的时候需要提醒下,因为现在实体都是自动创建的,大项目改实体结构太麻烦了,所以select列最好做个借口放在外面,让实体类实现借口,这样再使用这个方法就轻松了
ftlovexg 2011-05-24
  • 打赏
  • 举报
回复
感谢 duanzilin
问题有些眉目了。
准备结算。
小童 2011-05-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 duanzilin 的回复:]
示例:
xaml:

HTML code

<UserControl x:Class="SilverlightApplication1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/win……
[/Quote]+
沝林 2011-05-23
  • 打赏
  • 举报
回复
示例:
xaml:

<UserControl x:Class="SilverlightApplication1.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">

<Grid x:Name="LayoutRoot" Background="White">
<sdk:DataGrid AutoGenerateColumns="False" ItemsSource="{Binding isCheckedUsersList}" Margin="10,10,0,0" Name="dataGrid1" SelectionChanged="dataGrid1_SelectionChanged">
<sdk:DataGrid.Columns>
<!--选择-->
<sdk:DataGridTemplateColumn Header="选择">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding isChecked, Mode=TwoWay}" HorizontalAlignment="Center" VerticalAlignment="Center"></CheckBox>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTextColumn Binding="{Binding Name,Mode=TwoWay}" Header="名称" CanUserResize="True" Width="200" />
</sdk:DataGrid.Columns>
</sdk:DataGrid>
</Grid>
</UserControl>




using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.ComponentModel;

namespace SilverlightApplication1
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();

this.DataContext = this;
}

public List<isCheckedUsers> isCheckedUsersList
{
get
{
return new List<isCheckedUsers> {
new isCheckedUsers{isChecked = false,Name="sdfdsfds"},
new isCheckedUsers{isChecked = false,Name="似懂非懂所发生的"},
new isCheckedUsers{isChecked = false,Name="和风电股份"},
new isCheckedUsers{isChecked = false,Name="fgertretretre"},
};
}
}

private void dataGrid1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
DataGrid gridUsers = sender as DataGrid;

string showMessage = "";
if (gridUsers.SelectedItems.Count > 0)
{
foreach (isCheckedUsers dd in gridUsers.SelectedItems)
{
dd.isChecked = true;
}
}

}
}

public class isCheckedUsers : ViewModelBase
{
private bool _isChecked;
public bool isChecked
{
get { return _isChecked; }
set
{
if (_isChecked == value)
return;

_isChecked = value;

RaisePropertyChanged("isChecked");

}
}

private string _name;
public string Name
{
get { return _name; }
set
{
if (_name == value)
return;

_name = value;

RaisePropertyChanged("Name");

}
}

}

public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;

protected virtual void RaisePropertyChanged(string propertyName)
{
VerifyPropertyName(propertyName);

var handler = PropertyChanged;

if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}

public void VerifyPropertyName(string propertyName)
{
var myType = this.GetType();
if (myType.GetProperty(propertyName) == null)
{
throw new ArgumentException("Property not found", propertyName);
}
}
}
}

沝林 2011-05-23
  • 打赏
  • 举报
回复
刚才打错了两个字:

绑定到的集合的对象类型(isCheckedUsers )必须实现InotifyPropertyChanged接口,并且在isCheckedUsers.isChecked 更改时通知页面更改
沝林 2011-05-23
  • 打赏
  • 举报
回复
绑定到的集合的对象类型(isCheckedUsers )必须实现InotifyPropertyChanged接口,并且在isCheckedUsers.isChecked 更改时同时页面更改
ftlovexg 2011-05-23
  • 打赏
  • 举报
回复
求高手~~~
ftlovexg 2011-05-23
  • 打赏
  • 举报
回复
顶一个呀顶一个
ftlovexg 2011-05-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 duanzilin 的回复:]
刚才打错了两个字:

绑定到的集合的对象类型(isCheckedUsers )必须实现InotifyPropertyChanged接口,并且在isCheckedUsers.isChecked 更改时通知页面更改
[/Quote]

3Q.我试验试验

8,734

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧