我想绑定一个自定义对象列表作为列表框的源,我的列表框中有用户模板
<DataTemplate x:Key="UserTemplate1" >
<StackPanel Orientation="Horizontal">
<TextBlock Name="vmname" Text="{Binding }" Width="100"/>
<CheckBox Name="cb" IsChecked="{Binding ischeck}"/>
</StackPanel>
</DataTemplate>
我使用此模板作为listbox的数据类型
<ListBox Name="listbox3" Visibility="Hidden" Height="134" Width="156" Margin="515,82,62,104" IsSynchronizedWithCurrentItem="True" ItemTemplate="{StaticResource UserTemplate1}" />
我有自定义数据类型
的对象列表 class item{
string name;
bool val;
}
我无法将此列表绑定到列表框。我希望以这样的方式绑定列表:每当对列表中的复选框进行更改时,它们应该反映在对象列表中(项目)。
listbox3.itemsource = list_items
这对我不起作用
在这里,我无法将listbox3绑定到类checkvm的对象列表。
答案 0 :(得分:1)
您的问题是更改(反映在项类的实例中)不会自动反映到另一个视图/绑定到列表项。如果要通知第二个视图item
实例的属性已更改,则必须实现INotifyPropertyChanged
。
最简单的方法是使用MVVM框架。您的item类应该扩展实现更改通知的ViewModel类。
示例:
public class Item : ViewModelBase
{
private string _Name;
public string Name
{
get
{
return _Name;
}
set
{
if (_Name != value)
{
_Name = value;
RaisePropertyChanged(() => this.Name);
}
}
}
private bool _IsSelected;
public bool IsSelected
{
get
{
return _IsSelected;
}
set
{
if (_IsSelected != value)
{
_IsSelected = value;
RaisePropertyChanged(() => this.IsSelected);
}
}
}
}
答案 1 :(得分:1)
您将CheckBox.Checked
绑定到“缺席”,但是您的item
类不包含名为ischeck
的属性。
用于绑定到这样的项目列表:
class item{
string name;
bool val;
}
您的DataTemplate的绑定需要如下所示:
<DataTemplate x:Key="UserTemplate1" >
<StackPanel Orientation="Horizontal">
<TextBlock Name="vmname" Text="{Binding name}" Width="100"/>
<CheckBox Name="cb" IsChecked="{Binding val}"/>
</StackPanel>
</DataTemplate>
另请注意,如果您希望能够更改代码中的项目并让其自动更新UI,或者您希望进行任何类型的更改通知,那么您的类应该实现INotifyPropertyChanged
。
作为旁注,我讨厌你的(缺乏)命名约定。我强烈建议谷歌搜索标准的.Net命名约定并使用它。 :)