我的GridView有这个模板:
<DataTemplate x:Key="GroupTemplate1">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Border Background="{ThemeResource ListViewItemPlaceholderBackgroundThemeBrush}" Margin="0,9.5,0,0">
<Image Source="{Binding Property3}" Height="79" Width="79"/>
</Border>
<!-- <StackPanel Grid.Column="1" Margin="14.5,0,0,0">
<TextBlock Text="{Binding Property1}" Style="{ThemeResource ListViewItemTextBlockStyle}"/>
<TextBlock Text="{Binding Property2}" Style="{ThemeResource ListViewItemSubheaderTextBlockStyle}"/>
</StackPanel> -->
</Grid>
</DataTemplate>
如您所见,每个项目有三个信息:Property3(图像),Property2(文本),Property1(文本)。
如何使用这三个字段创建和添加新的ListViewItem并以编程方式将其添加到GridView?
类似的东西:
//
gridView1.Add(new ListViewItem("imagename", "text1", "text2");
//
答案 0 :(得分:2)
您似乎正在尝试同时执行MVVM和非MVVM。使用预先制作的DataTemplate和绑定,你无法按照自己的方式做事。通常,您在XAML中预先构建ListView之间可以做出选择,在这种情况下,设计或多或少是静态的,或者将ListView绑定到集合并使用INotifyPropertyChanged让UI识别它需要更新视图。了解WPF的大部分功能来自于很少需要手动将项目添加到UI控件或根本不需要更改它们。
这是一个非常简单的实现:
这将是每个GridViewItem从中获取其信息的对象 - 其中Property1,Property2等将来自:
class ModelSample
{
public object Property1 { get; set; } // anything you ever bind to *must* be a public property
public object Property2 { get; set; }
public object Property3 { get; set; }
}
以下是ViewModel示例的实现:
class ViewModelSample : INotifyPropertyChanged // uses System.ComponentModel
{
private List<ModelSample> models = new List<ModelSample>();
public List<ModelSample> Models
{
get { return models; }
set
{
models = value;
NotifyPropertyChanged("Models");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
然后,您将实例化ViewModelSample并设置DataContext:
var viewModelSample = new ViewModelSample();
// add your objects to viewModelSample.Models
this.DataContext = viewModelSample.
将ListView上的ItemsSource属性绑定到Models。每当您想要更改ListView的图像时,只需修改模型的内容,UI应立即反映集合的当前状态。
这可能看起来比你习惯的要复杂一些,但是一旦你得到使用NotifyPropertyChanged来提醒用户界面的基本想法,你会发现它的工作量实际上要少得多,WPF几乎可以处理一切都适合你。