Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to bind a single object instance in WPF?

Tags:

c#

binding

wpf

xaml

I am a WPF newcomer, and I've been searching for two days with no luck. I have a WPF window that has several text box controls, and a single object with some properties. This object is passed to the codebehind of my WPF window in it's constructor:

public partial class SettingsDialog : Window
{
    public SettingsObject AppSettings
    {
        get;
        set;
    }

    public SettingsDialog(SettingsObject settings)
    {
        this.AppSettings = settings;
        InitializeComponent();
    }
}

The SettingsObject looks something like this (simplified for clarity):

public class SettingsObject
{
    public string Setting1 { get; set; }
    public string Setting2 { get; set; }
    public string Setting3 { get; set; }

    public SettingsObject()
    {
        this.Setting1 = "ABC";
        this.Setting2 = "DEF";
        this.Setting3 = "GHI";
    }
}

And my WPF window (simplified):

<Window x:Class="MyProgram.SettingsDialog" 
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            DataContext="{Binding Source=AppSettings}">
    <Grid>
        <TextBox Name="Setting1Textbox" Text="{Binding Path=Setting1}"></TextBox>
        <TextBox Name="Setting2Textbox" Text="{Binding Path=Setting2}"></TextBox>
        <TextBox Name="Setting3Textbox" Text="{Binding Path=Setting3}"></TextBox>
    </Grid>
</Window>

How do you acheive two-way binding in this situation? I've tried what you see above (and so much more) but nothing works!

like image 638
walterbing1 Avatar asked Mar 06 '26 05:03

walterbing1


1 Answers

Have you set the DataContext property of the window to your instance of AppSettings?

public SettingsDialog(SettingsObject settings)
{

    InitializeComponent();

    //While this line should work above InitializeComponent,
    // it's a good idea to put your code afterwards.
    this.AppSettings = settings;

    //This hooks up the windows data source to your object.
    this.DataContext = settings;
}
like image 117
RQDQ Avatar answered Mar 07 '26 18:03

RQDQ