当前位置: 代码迷 >> Silverlight >> ListView 绑定 更改通知解决思路
  详细解决方案

ListView 绑定 更改通知解决思路

热度:6337   发布时间:2013-02-26 00:00:00.0
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,结果失败。

------解决方案--------------------------------------------------------

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)
            {
  相关解决方案