我的问题是关于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;
}
}
答案 0 :(得分:0)
clickitem
类,无论它是什么,都必须实现INotifyPropertyChanged interface,State
属性必须在设置时触发更改通知。否则WPF不知道你改变了属性的值并且不会更新绑定的控件。如果它没有,你可以在绑定的控件上调用UpdateTarget()'设置State
后的BindingExpression,但此时,使用数据绑定仍然有意义吗?