Привязка в WPF

WPF
  1. 6 года назад

    Alexandr_Erohin

    Контекст Администратор
    1. Ошибка в примере, нужно привязывать свойство FontFamily, а не Text. Исправил код в статье.
    2. Во-первых для привязки данных из кода необходимо использовать общедоступные свойства, вместо переменных. Во-вторых для привязки нужно задать контекст данных. Вот простой пример:

    XAML:

    ...
    <TextBox x:Name="txt" Text="{Binding Path=SomeText}"></TextBox>

    C#:

    public partial class MainWindow : Window
    {
            string sometext = "Text";
    
            public string SomeText
            {
                get { return sometext; }
                set { sometext = value; }
            }
    
            public MainWindow()
            {
                InitializeComponent();
    
                txt.DataContext = this;
            }
    }

    Для привязки данных в списковых элементах управления, например ListBox или DataGrid используется свойство ItemsSource вместо DataContext. Пример я приводил в теме - Настройка столбцов DataGridView

  2. Еще один вопрос по теме. Хотел сделать пример из главы про Текст Бокс, только с помощью привязки, но не получил результат. Не подскажите в чем ошибка?

    <TextBox TextWrapping="Wrap" Padding="5" AutoWordSelection="True" Name="txt"
                    SelectionChanged="TextBox_SelectionChanged">
                    Формально сущность, используемая для хранения набора вычисляемых значений, 
                    называется виртуальным стеком выполнения ...
                    </TextBox>
    
    <TextBlock TextWrapping="Wrap" Margin="5" Text="{Binding ElementName=txt, Path=SelectedText, Mode=OneWay}"></TextBlock>
  3. Еще один вопрос по этой же теме, теперь привязка данных к лист боксу:
    У меня есть простой класс:

       public class TestClass
        {
            public string Name { get; set; }
            public string ID { get; set; }
    
            public TestClass(string name, string id)
            {
                Name = name;
                ID = id;
            }
    
            public override string ToString()
            {
                return String.Format("Test Class {0} : {1} ", Name, ID);
            }
        }

    А также лист бокс куда я хочу его вывести:

                <ListBox ItemsSource="{Binding}" Name="mList" >
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <Label Content="{Binding Name}"/>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

    В коде окна пишу следующие

     public List<TestClass> MYList = new List<TestClass>();
    
                MYList.Add(new TestClass("Name_1", "111"));
                MYList.Add(new TestClass("Name_2", "101"));
                MYList.Add(new TestClass("Name_3", "103"));
                mList.DataContext = MYList;

    Так все отлично работает. Меня интересует как можно строку mList.DataContext = MYList перенести из кода в XALM разметку.