列表框中的文本块未填充值

时间:2015-08-31 18:15:25

标签: wpf xaml listbox

我正在尝试在列表框中填充文本块,如下所示。

首先,我尝试使用这个xaml工作正常。

    <ListBox Name="lbTodoList" HorizontalContentAlignment="Stretch" 
             ItemsSource="{Binding ThisList1}"
             DisplayMemberPath="{Binding ListItem.Name}"
             >

    </ListBox>

但是在下面尝试时,文本块中没有显示任何内容

<StackPanel Grid.Row="1">
    <TextBox Text="{Binding ElementName=lbTodoList, Path=SelectedValue}"/>
    <Button Command="{Binding ChangeCurrentView}">Click Me</Button>
    <Button Command="{Binding ChangeCurrentView}">Click Me</Button>
    <ListBox Name="lbTodoList" HorizontalContentAlignment="Stretch" 
             ItemsSource="{Binding ThisList1}"
             Width="200"
             >
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" VerticalAlignment="Center">
                    <TextBlock Width="auto" Foreground="Black" Text="{Binding Path=ListItem.Name}"/>
                </StackPanel>

            </DataTemplate>
        </ListBox.ItemTemplate>

    </ListBox>
</StackPanel>

无法弄清楚我在这里做错了什么。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

您正在尝试显示一个名为ThisList1的对象ListItem的集合,您应该正确定义您的模型,在这里您应该做什么: 定义Item类:

public class ListItem
{
    public String Name { get; set; }
    //add your properties
}

在您的codebehind或Viewmodel中定义将与ListBox

绑定的集合
    private ObservableCollection<ListItem> _thisList1=new ObservableCollection<ListItem>()
    {
        new ListItem()
        {
            Name = "Name1",
        }, new ListItem()
        {
            Name = "Name2",
        }
    }  ;
    public ObservableCollection<ListItem> ThisList1
    {
        get
        {
            return _thisList1;
        }
        set
        {                
            _thisList1 = value;                
        }
    }

最后在这里如何定义ListBox的{​​{1}}

DataTemplate

不要忘记使用codebehind设置<StackPanel Grid.Row="1"> <TextBox Text="{Binding ElementName=lbTodoList, Path=SelectedItem.Name}"/> <Button Command="{Binding ChangeCurrentView}">Click Me</Button> <Button Command="{Binding ChangeCurrentView}">Click Me</Button> <ListBox Name="lbTodoList" HorizontalContentAlignment="Stretch" ItemsSource="{Binding ThisList1}" Width="200" > <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal" VerticalAlignment="Center"> <TextBlock Width="auto" Foreground="Black" Text="{Binding Name}"/> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> </StackPanel>

DataContext

或通过Xaml

this.DataContext=this;

并考虑实施DataContext="{Binding RelativeSource={RelativeSource Self}}" 界面以自动从视图模型更新UI。