[英]How do binding with listview
如何與ListView綁定? 我上過課,做過收藏,但是當我裝訂時不起作用:
public class DrawingVisualObject : DrawingVisual
{
public int Id { get; set; }
public string Name { get; set; }
public DrawingVisualObject(int id, string name)
{
Id = id;
Name = name;
}
}
ObservableCollection<DrawingVisualObject> mPointNames = new ObservableCollection<DrawingVisualObject>();
public MainWindow()
{
this.DataContext = mPointNames;
InitializeComponent();
lstv.ItemsSource = mPointNames;
}
public ObservableCollection<DrawingVisualObject> PointNames
{
get
{
return mPointNames;
}
}
這是我寫的xaml代碼
<ListView MinHeight="350" ItemsSource="{Binding DrawingVisualObject, Mode=TwoWay}" Name="lstv">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Name}"/>
<GridViewColumn DisplayMemberBinding="{Binding Id}"/>
您不必使用DrawingVisual進行綁定。 在ViewModel或Model ceate類FooItem中
public class FooItem
{
public int Id { get; set; }
public string Name { get; set; }
public FooItem(int id, string name)
{
Id = id;
Name = name;
}
}
然后在您的ViewModel中創建ObservableCollection
public ObservableCollection<FooItem> PointNames
{
get
{
return mPointNames;
}
}
在您的xaml中使用:
<ListView Margin="10" Name="FooItems" ItemsSource="{Binding Path=PointNames}">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" Width="120" DisplayMemberBinding="{Binding Name}" />
<GridViewColumn Header="Id" Width="50" DisplayMemberBinding="{Binding Id}" />
</GridView>
</ListView.View>
</ListView>
比刪除“ lstv.ItemsSource = mPointNames;” 從View構造函數。 在MVVM中,應該只進行init調用,最大程度地初始化事件處理程序。
希望能幫助到你
您的示例看起來並不像MVVM,但是如果您想在代碼中包含數據,請使用依賴項屬性。
這是XAML的示例
<Window x:Class="Test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Test"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525"
Name="myWindow">
<Grid>
<ListView ItemsSource="{Binding ElementName=myWindow, Path=DrawingVisualCollection}">
<ListView.View>
<GridView>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Path=Name}"></GridViewColumn>
<GridViewColumn Header="Id" DisplayMemberBinding="{Binding Path=Id}"></GridViewColumn>
</GridView>
</ListView.View>
</ListView>
</Grid>
后面的代碼如下所示
namespace Test
{
public class DrawingVisualObject : DrawingVisual
{
public int Id { get; set; }
public string Name { get; set; }
public DrawingVisualObject(int id, string name)
{
Id = id;
Name = name;
}
}
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public ObservableCollection<DrawingVisualObject> DrawingVisualCollection
{
get { return (ObservableCollection<DrawingVisualObject>)GetValue(DrawingVisualCollectionProperty); }
set { SetValue(DrawingVisualCollectionProperty, value); }
}
// Using a DependencyProperty as the backing store for DrawingVisualCollection. This enables animation, styling, binding, etc...
public static readonly DependencyProperty DrawingVisualCollectionProperty =
DependencyProperty.Register("DrawingVisualCollection", typeof(ObservableCollection<DrawingVisualObject>), typeof(MainWindow), new PropertyMetadata(new ObservableCollection<DrawingVisualObject>()));
public MainWindow()
{
InitializeComponent();
List<DrawingVisualObject> sample = new List<DrawingVisualObject>();
sample.Add(new DrawingVisualObject(1, "Yolo"));
sample.Add(new DrawingVisualObject(2, "Swag"));
this.FillCollection(sample);
}
public void FillCollection(IEnumerable<DrawingVisualObject> objects2fill)
{
this.DrawingVisualCollection.Clear();
foreach(DrawingVisualObject obj in objects2fill)
{
this.DrawingVisualCollection.Add(obj);
}
}
}
}
這應該為你工作
請記住:如果您要重新初始化Collection,則可能會破壞綁定。 我試圖在示例方法FillCollection()上展示這一點。 因此,這意味着如果您使用的是MVVM,則應始終將ObservableCollection設置為私有集。
我建議您再次更准確地使用MVVM。 知道什么是視圖模型的通用基礎是一個好的開始 !
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.