1public class MyItem: BindableBase
2{3 public int Index { set; get;}4 public string ItemName { set; get;}5:6}78private ObservableCollection<MyItem> MyItemCollection { set; get;}= new ObservableCollection<MyItem>()9{10 new MyItem{ ItemName="item1"},11 new MyItem{ ItemName="item2"},12 new MyItem{ ItemName="item3"},13 new MyItem{ ItemName="item4"},14 new MyItem{ ItemName="item5"}15};
このようなエラーが出力されます。 System.Windows.Data Error: 40 : BindingExpression path error: 'Index' property not found on 'object' ''ListBoxItem' (Name='')'. BindingExpression:Path=Index; DataItem='ListBoxItem' (Name=''); target element is 'TextBlock' (Name=''); target property is 'Text' (type 'String')
1using System;2using System.Globalization;3using System.Windows.Controls;4using System.Windows.Data;56:78 public class ItemContainerToIndexConverter : IValueConverter
9{10 public object Convert(object value, Type targetType, object parameter, CultureInfo culture)11{12 var container = value as ContentControl;13 var itemsControl = ItemsControl.ItemsControlFromItemContainer(container);14return itemsControl != null ? itemsControl.Items.IndexOf(container.DataContext):-1;15}1617 public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)18{19 throw new NotImplementedException();20}21}
1 public partial class MainWindow : Window
2{3 public ObservableCollection<MyItem> Collection { get;}= new ObservableCollection<MyItem>()4{5 new MyItem{ ItemName="item1"},6 new MyItem{ ItemName="item2"},7 new MyItem{ ItemName="item3"},8 new MyItem{ ItemName="item4"},9 new MyItem{ ItemName="item5"}10};1112 public MainWindow()13{14InitializeComponent();15 this.DataContext = this;1617RefleshCollectionIndex();18 this.Collection.CollectionChanged +=(s, e)=>RefleshCollectionIndex();19}2021 public voidRefleshCollectionIndex()22{23for(int i =0; i < this.Collection.Count;++i)24{25 this.Collection[i].Index = i;26}27}28}2930//31 public class MyItem : INotifyPropertyChanged
32{33 public event PropertyChangedEventHandler PropertyChanged;34 protected voidRaisePropertyChanged([System.Runtime.CompilerServices.CallerMemberName] string name = null)35{36 PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));37}3839 private int _index;40 public int Index
41{42 get {return _index;}43 set {if(_index != value){ _index = value;RaisePropertyChanged();}}44}4546 private string _itemName;47 public string ItemName
48{49 get {return _itemName;}50 set {if(_itemName != value){ _itemName = value;RaisePropertyChanged();}}51}52}53
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/21 06:14
2017/08/21 08:39
2017/08/21 09:47