首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > CAD教程 >

ListView 绑定 更动通知

2012-08-07 
ListView 绑定 更改通知我为一个ListView定义了如下的CollectionViewSource:CollectionViewSource.GroupD

ListView 绑定 更改通知
我为一个ListView定义了如下的CollectionViewSource:

<CollectionViewSource.GroupDescriptions>
  <PropertyGroupDescription PropertyName="GroupSettingID" Converter="{StaticResource GetGroupSettingByPlayerConverter}"/>
</CollectionViewSource.GroupDescriptions>

其中的 
PropertyGroupDescription PropertyName="GroupSettingID" Converter="{StaticResource GetGroupSettingByPlayerConverter}"/> 
指向一个自定义的 GroupSettingID , 转换器通过此ID在一个列表中将与ID对应的GroupSetting的Name属性返回。

有没有什么办法,当对应的GroupSetting中的Name属性改变时,PropertyGroupDescription的属性一起改变?

[解决办法]
是不是CollectionViewSource或者ICollectionView.Refresh()一下的问题呀?
[解决办法]
中午我大概的试了一下。把CollectionViewSource放在VM里。
然后当Group条件变化时,比如ComboBox(显示Group条件)双向绑定VM里的自定义的某个属性,当这个属性变化时在它的set{}里先把CVS.GroupDescriptions.Clear(),然后再Add新选择的条件。界面会立即反应,无需ICollectionView.Clear().

顺便说一下,我做的过程中有个东西绊了我好长时间。就是CollectionViewSource严格讲并不是ICollectionView的实现(对应的PagedCollectionView,DomainCollectionView应该是吧)。所以GroupDescriptions必须Add到CVS的GroupDescriptions上。而我开始时,是这样做的。


public ICollectionView CollectionView
{
get
{
return CreateView(_Context.MyEntities);
}
}
public ICollectionView CreateView(IEnumerable source)
{
CollectionViewSource cvs = new CollectionViewSource();
cvs.Source = source;
return cvs.View;
}

然后我一直试图通过CollectionView来增加GroupDescriptions,结果失败。

[解决办法]

C# code
public class MainPageViewModel : NotificationObject{    private XXXDomainContext _Context = new XXXDomainContext();    private CollectionViewSource cvs;    IEnumerable<string> groupSettings;    public IEnumerable<string> GroupSettings    {        get        {            if (groupSettings == null)                groupSettings = new List<string> { "分组条件1", "分组条件2" };            return groupSettings;        }    }            private string currentSetting;    public string CurrentSetting    {        get { return currentSetting; }        set        {            if (currentSetting != value)            {                currentSetting = value;                RaisePropertyChanged(() => this.CurrentSetting);                cvs.GroupDescriptions.Clear();                cvs.GroupDescriptions.Add(new PropertyGroupDescription(currentSetting));            }        }    }    public MainPageViewModel()    {        if (!DesignerProperties.IsInDesignTool)            _Context.Load(_Context.GetXXXQuery(), lo => { CurrentSetting = "分组条件2"; }, null);    }    public ICollectionView CollectionView    {        get {   return CreateView(_Context.XXX);  }    }    public ICollectionView CreateView(IEnumerable source)    {        if (cvs == null)            cvs = new CollectionViewSource();        cvs.Source = source;        return cvs.View;    }
[解决办法]
探讨
有没有什么办法,当对应的GroupSetting中的Name属性改变时,PropertyGroupDescription的属性一起改变?

热点排行