c# - 将 ListBox 的 ItemsSource 设置为其包含类的属性

标签 c# wpf xaml binding itemssource

我有以下 xaml -

<Window x:Class="DataTemplateTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="400" Width="600" Loaded="Window_Loaded">    
    <Grid>
        <ListBox Height="380" Margin="10,12,0,0" Width="355"/>
    </Grid>
</Window>  

和下面的代码隐藏 -

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        _nameList = new List<string>
                        {
                            "X",
                            "Y",
                            "Z"
                        };
    }

    private List<string> _nameList;
    public List<string> NameList
    {
        get { return _nameList; }
    }
}  

我想将 NameList 设置为来自 xaml 的 ListBox 的 ItemsSource不是 来自代码隐藏。我怎么做?

编辑: 我知道这样做的 MVVM 方式。但这不是我要问的

编辑: 这并不是说我不喜欢 MVVM 左右。在做一些快速测试时,我才意识到我不知道该怎么做。所以,想知道这是否可能,并尝试学习。无论如何都可以使用 StaticResource 吗?

最佳答案

如果您的意思是“不采用 MVVM 方式”您不想使用 ViewModel,那么您 可以通过以下步骤将数据绑定(bind)到“代码隐藏”:

在 XAML 中设置绑定(bind):

<ListBox ItemSource="{Binding NameList}"/>

并在填充列表后将 DataContext 设置为 this,例如在 Window_Loaded 事件中:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    _nameList = new List<string>
                    {
                        "X",
                        "Y",
                        "Z"
                    };
    DataContext = this;
}

编辑:如果您不想设置DataContext,您可以直接绑定(bind)到窗口:

<Window Name="window" ... />

  <ListBox  ItemsSource="{Binding NameList, ElementName=window}"/>

或者您可以将 AncestorBinding 用作

<ListBox ItemsSource="{Binding NameList, RelativeSource={RelativeSource AncestorType=Window}}"/>

但是,在这两种情况下,列表都是空的,因为 View 不会收到您在加载事件中填充列表这一事实的通知。因此,您需要使用 INPC 来通知 "NameList" 属性已更改。

关于c# - 将 ListBox 的 ItemsSource 设置为其包含类的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12348436/

相关文章:

C# 从 Cookie 读取无效的 JSON 基元

c# - 在 UWP 下,GetRectFromCharacterIndex 不会返回根据控件样式调整的值

c# - 在 XAML (UWP) 中绑定(bind)单例

c# - 图像的一部分内的 WPF ScrollableViewer

c# - WPF 按钮后台操作被代码覆盖

c# - 如何在一个 Canvas 元素 wpf 中找到所有标签

c# - 自更新应用问题

c# - C#UDPClient未通过外部IP接收数据包

c# - YouTube V3 API - Google.Apis.Requests.RequestErrorBackend 错误 [503]

wpf - WPF 的轻量级 View 模型