XAML ListBox显示类名而不是类属性

时间:2013-05-10 22:07:38

标签: xaml windows-8

这里我配置了一个Listbox,其中DataTemplate中的TextBlox被设置为绑定“Name”属性。但它显示了完整的类名“DomainClasses.Entities.Program”。为什么呢?

<Grid DataContext="{Binding _CurrentProgram }">
.....
.....
    <ListBox x:Name="ProgramsListBox" Width="600" Height="400" Margin="50,0,50,0" ItemsSource="{Binding _Programs}" VerticalAlignment="Top">
       <DataTemplate>
          <StackPanel>
             <TextBlock Text="{Binding Name}"></TextBlock>
          </StackPanel>
       <DataTemplate>
    </ListBox>
----
----
</Grid>

这是ViewModel类

public class MainPageViewModel : INotifyPropertyChanged
{
    public MainPageViewModel()
    {
        _currentProgram = new Program();
        _Programs = new ObservableCollection<Program>();
    }

    public async void SaveProgram(bool isEditing)
    {
        _Programs.Add(_currentProgram);
        OnPropertyChanged();
    }

    private Program _currentProgram;
    public Program _CurrentProgram
    {
        get { return _currentProgram; }
        set
        {

            _currentProgram = value;
            OnPropertyChanged();

        }
    }

    private ObservableCollection<Program> _programs;
    public ObservableCollection<Program> _Programs
    {
        get
        {
            return _programs;
        }
        set
        {
            this._programs = value;
            OnPropertyChanged();
        }
    }

    // Implement INotifyPropertyChanged Interface
    public event PropertyChangedEventHandler PropertyChanged;
    private void OnPropertyChanged([CallerMemberName] string caller = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(caller));
        }
    }
}

2 个答案:

答案 0 :(得分:2)

这就是你需要的:

<ListBox>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Button/>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

注意到ListBox.ItemTemplate附近的DataTemplate

你有什么:

<ListBox x:Name="ProgramsListBox" Width="600" Height="400" Margin="50,0,50,0" ItemsSource="{Binding _Programs}" VerticalAlignment="Top">
   <DataTemplate>
      <StackPanel>
         <TextBlock Text="{Binding Name}"></TextBlock>
      </StackPanel>
   <DataTemplate>
</ListBox>

作为孩子创建ListBox DataTemplate(同样意义上ItemsSource中的项目是ListBox的子项)。如果我没记错的话,当您设置ItemsSource的{​​{1}}时,将删除以其他方式设置的所有项目。所以你最终得到的是一个ListBox,里面有一堆ListBox,没有设置Program,所以它只显示了绑定类的名称。

答案 1 :(得分:0)

您需要在listview.itemtemplate中添加数据模板,然后执行绑定。现在,您将数据模板添加为列表视图的子项。