C# wpf observablecollection 绑定到 xaml
C# wpf observablecollection binding to xaml
我正在尝试使用 ObservableCollection 将数据从 object 绑定到 xaml 视图:
我有一个 class 其中有 属性 :
public ObservableCollection<Roll> RollList = new ObservableCollection<Roll>();
还有一些修改 collection 的方法(基本上是添加新条目的方法),例如:
RollList.Add(roll); //roll is and Roll class object bellow
这是我在 collection 中使用的卷 class:
class Roll : INotifyPropertyChanged
{
private List<int> _hitList;
public List<int> HitList
{
get { return _hitList; }
set { _hitList = value; OnPropertyChanged("HitList"); }
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
}
public class ListToStringConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
List<int> list = value as List<int>;
return String.Join("", list.ToArray());
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string list = value as string;
return list.Split(' ').Select(n => int.Parse(n)).ToList();
}
}
现在在我的主 window class 中实例化我的 class,它在上面构造 ObservableCollection object 并用数据填充它;
我像这样将 collection 绑定到 DataContex;
DataContext = MyCoolClass; //MyCoolClass has ObservableCollection<Roll> RollList inside of it
我做的最后一件事:
<Window.Resources>
<local:ListToStringConverter x:Key="ListToStringConverter" />
</Window.Resources>
<ListBox
Height="Auto"
Width="Auto"
Name="RollList"
ItemsSource="{Binding RollList, Converter={StaticResource ListToStringConverter}}"
/>
列表框中没有填充数据。我知道 RollList object 充满了数据,因为我可以在 watch window 中找到它,如果我手动分配列表框项目源:
RollList.ItemsSource = ConvertedCollection;
有效,列表框填充了我不需要的数据,但我想将其绑定到 xaml;
PS。我是 C# 和 WPF 的新手。
public ObservableCollection<Roll> RollList = new ObservableCollection<Roll>();
那不是 属性。那是一个领域。 WPF 使用属性。
您需要实施 属性。
public MyCoolClass
{
private ObservableCollection<Roll> _rollList;
public ObservableCollection<Roll> RollList
{
get { return _rollList; }
set
{
if (_rollList != value)
{
_rollList = value;
OnPropertyChanged("RollList");
}
}
}
}
我正在尝试使用 ObservableCollection 将数据从 object 绑定到 xaml 视图: 我有一个 class 其中有 属性 :
public ObservableCollection<Roll> RollList = new ObservableCollection<Roll>();
还有一些修改 collection 的方法(基本上是添加新条目的方法),例如:
RollList.Add(roll); //roll is and Roll class object bellow
这是我在 collection 中使用的卷 class:
class Roll : INotifyPropertyChanged
{
private List<int> _hitList;
public List<int> HitList
{
get { return _hitList; }
set { _hitList = value; OnPropertyChanged("HitList"); }
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
}
public class ListToStringConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
List<int> list = value as List<int>;
return String.Join("", list.ToArray());
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string list = value as string;
return list.Split(' ').Select(n => int.Parse(n)).ToList();
}
}
现在在我的主 window class 中实例化我的 class,它在上面构造 ObservableCollection object 并用数据填充它;
我像这样将 collection 绑定到 DataContex;
DataContext = MyCoolClass; //MyCoolClass has ObservableCollection<Roll> RollList inside of it
我做的最后一件事:
<Window.Resources>
<local:ListToStringConverter x:Key="ListToStringConverter" />
</Window.Resources>
<ListBox
Height="Auto"
Width="Auto"
Name="RollList"
ItemsSource="{Binding RollList, Converter={StaticResource ListToStringConverter}}"
/>
列表框中没有填充数据。我知道 RollList object 充满了数据,因为我可以在 watch window 中找到它,如果我手动分配列表框项目源:
RollList.ItemsSource = ConvertedCollection;
有效,列表框填充了我不需要的数据,但我想将其绑定到 xaml;
PS。我是 C# 和 WPF 的新手。
public ObservableCollection<Roll> RollList = new ObservableCollection<Roll>();
那不是 属性。那是一个领域。 WPF 使用属性。
您需要实施 属性。
public MyCoolClass
{
private ObservableCollection<Roll> _rollList;
public ObservableCollection<Roll> RollList
{
get { return _rollList; }
set
{
if (_rollList != value)
{
_rollList = value;
OnPropertyChanged("RollList");
}
}
}
}