Проблема привязки данных WPF - PullRequest
0 голосов
/ 09 января 2011

Я новичок в WPF.

У меня есть приложение wpf, и у меня просто есть панель док-станции, а внутри панели док-станции у меня есть текстовый блок.

Я хочу связать текстсвойство textblock к свойству моего пользовательского объекта, но это «не работает».

Я думаю, что я что-то здесь упускаю, но не знаю что.

Вот фрагмент кода.

      <TextBlock Text="{Binding Source=myDataSource, Path=ColorName}"/>
</DockPanel>

Мой пользовательский класс.

class MyData
    {
        public string ColorName { get; set; }
}

и конструктор главного окна ..

public partial class MainWindow : Window
    {
        MyData myDataSource;
        public MainWindow()
        {
            InitializeComponent();
            myDataSource = new MyData { ColorName = "Red" };
    }
}

Ответы [ 3 ]

1 голос
/ 09 января 2011

myDataSource нужно получить и установить. Вам также нужно установить dataContext для окна, поэтому оно должно быть -

public partial class MainWindow : Window
{
    public MyData MyDataSource { get; set; }
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = this;
        MyDataSource = new MyData { ColorName = "Red" };
    }
}

public class MyData
{
    public string ColorName { get; set; }
}

и код xaml должен быть -

<TextBlock Text="{Binding MyDataSource.ColorName}"/>

edit Извините, я ошибся, я изменил на правильный код

0 голосов
/ 09 января 2011

Если вы хотите привязать только к MyData, не устанавливайте окно как его собственное DataContext. Istead, установите данные, к которым вы привязываете. Таким образом, становится более понятным, что такое данные и что такое просмотр.

Кроме того, потеря Source на Binding, вам она вообще не понадобится.

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        this.DataContext = new MyData { ColorName = "Red" };
    }
}

public class MyData
{
    public string ColorName { get; set; }
}

XAML:

<TextBlock Text="{Binding ColorName}"/>
0 голосов
/ 09 января 2011
  1. То, к чему вы привязываетесь, должно быть общественной собственностью.(Ваш объект данных также должен удовлетворять этому условию)
  2. Если вы не установите свойство до InitializeComponent(), привязка может не обновиться в зависимости от вашей привязки.
  3. Если вы установите ее сновав любой момент времени после инициализации и для того, чтобы привязка была обновлена, вы должны реализовать INotifyPropertyChanged или работать со свойствами зависимостей.
  4. Поскольку данные находятся в вашем окне, вам может потребоваться доступ к ним через это: {Binding ElementName = window, Path = myDataSource.ColorName}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...