为什么不更新我的GridView?

时间:2014-04-15 00:19:35

标签: c# xaml gridview

我的问题是关于ItemTemplateSelector

我的模型中有一个名为State的属性,根据State,我应用了两种不同的样式。我使用SQLite作为数据,但属性State使用SQLite中的属性[ignore]标记。

当我单击GridView中的项目时,我需要更改样式。

private void productsDG_ItemClick(object sender, ItemClickEventArgs e)
{
    var clickitem = ((Product)e.ClickedItem);
    clickitem.State = true; 
}

更改GridView的状态不会更新项目的DataTemplate。 (DataTemplate工作正常,我用两种状态测试了它。)

自定义数据模板是:

public class CustomDataTemplateSelector : DataTemplateSelector
{
    public DataTemplate defaultTemplate { get; set; }
    public DataTemplate unavailable { get; set; }

    protected override DataTemplate SelectTemplateCore(object item, DependencyObject container)
    {
        Product prod = (Product)item;
        if (prod.State == true)
            return defaultTemplate;

        return unavailable;
    }
}

1 个答案:

答案 0 :(得分:0)

clickitem类,无论它是什么,都必须实现INotifyPropertyChanged interfaceState属性必须在设置时触发更改通知。否则WPF不知道你改变了属性的值并且不会更新绑定的控件。如果它没有,你可以在绑定的控件上调用UpdateTarget()'设置State后的BindingExpression,但此时,使用数据绑定仍然有意义吗?