Bindowanie WPF

0

Witam, mam problem, gdyż nie działa mi bindowanie do obiektu. Mam klasę osoba

 namespace WpfApplication3 
{
    public partial class osoba  
    {
 
        public int wartosc1 { get ; set; }
        public int wartosc2 { get; set; }
     }
}

oraz utworzoną jego instancję

namespace WpfApplication3
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            kasia = new osoba();
        }
        public osoba kasia { get; set; }
    }
    }
 

W XAML-u chciałem przypisać wartości, lecz nie działa poprawnie.

<Window x:Class="WpfApplication3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:c="clr-namespace:WpfApplication3"
        Title="MainWindow" Height="350" Width="525">
    
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <StackPanel Grid.Column="0" >
 
        </StackPanel>
            <StackPanel Orientation="Vertical" Grid.Column="1">
            <TextBox  Text="{Binding kasia.wartosc1}"/>
            <TextBlock  Text="{Binding kasia.wartosc1}"/>
        </StackPanel>
    </Grid>
</Window> 
2

W konstruktorze MainWindow dopisz linię:

 DataContext = this; 

Zapewne chodzi ci o bindowanie dwustronne, więc jeszcze możesz zmienić

<TextBox  Text="{Binding kasia.wartosc1}"/>
<TextBlock  Text="{Binding kasia.wartosc1}"/>
 

na:

<TextBox Text="{Binding kasia.wartosc1, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<TextBox Text="{Binding kasia.wartosc1, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
 
0

dzięki, działa, myślałem, że jest automatycznie ustawione kontekst danych na klasę MainWindows

0

Mam małe pytanie do kodu z pierwszego postu. Za konstruktorem MainWindow() znajduje się deklaracja właściwości typu **osoba **o nazwie takiej jak instancja **kasia **. I zdaję sobie sprawę z tego że w bindowaniu nie można odwołać się do pola lecz przez właściwość. Ale przecież klasa **osoba **ma właściwości o nazwie **wartość1 **i **wartość2 **. Dlaczego nie można porostu stworzyć obiektu **kasia **i bindować go za pomocą jego właściwości ? Moje rozwiązanie nie działa, ale nie potrafię wyjaśnić dlaczego. Proszę o pomoc.

Kod programu :

namespace WpfApplication3
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            DataContext = this; 
            osoba kasia = new osoba();
        }
    }
    }
 }
0

a niby skad ma wiedziec wpf o tym ze Ty obiekt stworzyles wewnatrz jakies funkcji?

Jezeli chcesz bindowac to musi byc to property danej klasy

1 użytkowników online, w tym zalogowanych: 0, gości: 1