列表框绑定问题

时间:2011-08-28 17:38:32

标签: wpf data-binding listbox wpf-controls wpftoolkit

请解决我的问题,我的列表框没有绑定,我不知道:(

class TLocation
{
    public string name;
}

主窗口:

<Window x:Class="WpfApplication5.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication5"
        Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded">

    <Window.Resources>
        <DataTemplate DataType="{x:Type local:TLocation}" x:Key="myTaskTemplate">
            <TextBlock Height="23" HorizontalAlignment="Left" Margin="1" Name="textBlock1" Text="{Binding Path=name, FallbackValue=name}" VerticalAlignment="Top" />
        </DataTemplate>
    </Window.Resources>

    <Grid>
        <ListBox Height="131" HorizontalAlignment="Left" Margin="29,44,0,0" Name="listBox1" VerticalAlignment="Top" Width="200" ItemTemplate="{StaticResource myTaskTemplate}" />
    </Grid>
</Window>

主窗口代码:

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

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        List<TLocation> list = new List<TLocation>();

        TLocation temp = new TLocation();

        temp.name = "hi";

        list.Add(temp);

        listBox1.ItemsSource = list;
    }
}

1 个答案:

答案 0 :(得分:1)

namefield,但您只能绑定到公共properties。如果名称在运行时更改,您可能还需要实现INotifyPropertyChanged。如果您不熟悉数据绑定,请务必阅读the overview

e.g。

public class TLocation : INotifyPropertyChanged
{
    private string _name = null;
    public string Name
    {
        get { return _name; }
        set
        {
            if (_name != value)
            {
                _name = value;
                OnPropertyChanged("Name");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

(绑定也是个案敏感,你的大小写不遵循conventions所以我在我的示例中更改了它,此处Binding.Path需要Name。)