1

我想将自定义对象列表作为源绑定到列表框,其中我的列表框的用户模板为

    <DataTemplate x:Key="UserTemplate1" >
      <StackPanel Orientation="Horizontal">
        <TextBlock  Name="vmname" Text="{Binding }" Width="100"/>
        <CheckBox Name="cb" IsChecked="{Binding ischeck}"/>
       </StackPanel>
    </DataTemplate>

我使用这个模板作为列表框的数据类型

      <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 类的对象列表。

4

2 回答 2

1

您将您的绑定CheckBox.Checked到“ischeck”,但是您的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>

另请注意,INotifyPropertyChanged如果您希望能够在代码中更改项目并让它自动更新 UI,或者如果您想要执行任何类型的更改通知,则您的类应该实现。

作为旁注,我讨厌你(缺乏)命名约定。我强烈建议使用谷歌搜索标准的 .Net 命名约定并使用它。:)

于 2015-03-25T15:43:37.887 回答
1

您的问题是更改(反映在项目类的实例中)不会自动反映到另一个视图/绑定到列表中的项目。如果要通知第二个视图item实例的属性已更改,它必须实现INotifyPropertyChanged. 最简单的方法是使用 MVVM 框架来实现。您的项目类应该扩展实现更改通知的 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);
            }
        }
    }
}
于 2015-03-25T15:26:36.357 回答