无法看到列表框中绑定的项

本文关键字:绑定 列表 | 更新日期: 2023-09-27 18:05:27

我用这个结构创建了一个ListBox:

<ListBox VerticalAlignment="Stretch" 
                         Background="AliceBlue"
                         ScrollViewer.CanContentScroll="True" 
                         ScrollViewer.VerticalScrollBarVisibility="Visible"
                         ItemsSource="{Binding EventInfo}">

你怎么能看到我绑定了EventInfo属性,我在代码后面赋值。该属性与我的其他属性一样具有OnPropertyChange();实现,并且设置的值是正确的。无论如何,我无法显示绑定的源代码:

 <ListBox.ItemTemplate>
      <DataTemplate>
            <StackPanel Orientation="Horizontal">
               <TextBlock Text="{Binding Path=League}" />
               <TextBlock Text="test" />
            </StackPanel>
      </DataTemplate>
 </ListBox.ItemTemplate>

现在属性League值也不显示值测试。我真的不明白为什么。League属性存在,而且我在xaml中没有错误。

我做错了什么?

更新:

public Models.EventInfo EventInfo
    {
        get { return _eventInfo; }
        set
        {
            _eventInfo = value;
            OnPropertyChanged();
        }
    }

Model

public class EventInfo
{
    public string League { get; set; }
    public string Date { get; set; }
    public string GameWeek { get; set; }
    public string GameStart { get; set; }
    public string FirstTime { get; set; }
    public string SecondTime { get; set; }
    public string Stadium { get; set; }
    public List<MatchArbiter> Arbiter { get; set; }
}

无法看到列表框中绑定的项

试试这个。您需要用一个集合填充ItemsSource,而不是单个项。您需要一个集合属性,而不是现有的EventInfo属性。我将把它重命名为EventInfoItems,以尽量减少混淆。

private ObservableCollection<Models.EventInfo> _eventInfoItems = 
    new ObservableCollection<Models.EventInfo>();
public ObservableCollection<Models.EventInfo> EventInfoItems
{
    get { _eventInfoItems; }
    set
    {
        _eventInfoItems = value;
        OnPropertyChanged();
    }
}

现在,如果您希望列表中出现任何内容,则必须在某个地方向该集合添加一些项。您可以暂时在视图模型构造函数中创建一些测试项。这样的:

    EventInfoItems.Add(new EventInfo { League = "NBA" });
    EventInfoItems.Add(new EventInfo { League = "Premier League" });
    EventInfoItems.Add(new EventInfo { League = "Serie A" });

XAML

<ListBox 
    VerticalAlignment="Stretch" 
    Background="AliceBlue"
    ScrollViewer.CanContentScroll="True" 
    ScrollViewer.VerticalScrollBarVisibility="Visible"
    ItemsSource="{Binding EventInfoItems}"
    >
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
               <TextBlock Text="{Binding Path=League}" />
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
<标题> 更新

结果OP可能只有一个项目。如果是这种情况,ListBox就没有必要了。当你只有一个项目,你想用DataTemplate显示它时,ContentControl是正确的控件。这个XAML将使用EventInfo属性的原始版本:

public Models.EventInfo EventInfo
{
    get { return _eventInfo; }
    set
    {
        _eventInfo = value;
        OnPropertyChanged();
    }
}
XAML:

<ContentControl 
    VerticalAlignment="Stretch" 
    Background="AliceBlue"
    ScrollViewer.CanContentScroll="True" 
    ScrollViewer.VerticalScrollBarVisibility="Visible"
    Content="{Binding EventInfo}"
    >
    <ContentControl.ContentTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
               <TextBlock Text="{Binding Path=League}" />
            </StackPanel>
        </DataTemplate>
    </ContentControl.ContentTemplate>
</ContentControl>