Проблема привязки списка - PullRequest
       13

Проблема привязки списка

0 голосов
/ 28 августа 2011

Пожалуйста, решите мою проблему, мой список не связывается, я не знаю почему: (

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 Ответ

1 голос
/ 28 августа 2011

name - это поле , однако вы можете привязать только к общедоступным свойствам .Вы также можете реализовать INotifyPropertyChanged, если имя изменяется во время выполнения.Если вы новичок в привязке данных, обязательно прочитайте обзор .

например,

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));
        }
    }
}

(Привязка также чувствительна к регистру и ваша капитализация не соответствует условных обозначений , поэтому я изменил его в моем примере, здесь Binding.Path должно быть Name.)

...