这里我配置了一个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));
}
}
}
答案 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中添加数据模板,然后执行绑定。现在,您将数据模板添加为列表视图的子项。