user857521
user857521

Reputation:

TextBox binding not initialising

I'm have a TextBox which gets added to a Window alongside a Checkbox. I've managed to bind the TextBox to property Order of the CheckedListItem handler so when a change is made it binds correctly and updates.

My problem I'm having is that I cannot get it to initialise with starting values. My constructor is as follows

public partial class OwnerSettingWindow : Window
{

public ObservableCollection<CheckedListItem<Owner>> Owners { get; set; }

public class Owner
{    
    public String OwnerName { get; set; }
    public String OwnerOrder { get; set; }

}

public OwnerSettingWindow()
{
    InitializeComponent();

    Owners = new ObservableCollection<CheckedListItem<Owner>>();

    string testString = @"Item1,true,1:Item2,true,2:Item3,false,24"; ;
    string[] splitOwners = testString.Split(':');

    foreach (string item in splitOwners)
    {
        string[] spOwnerSetting = item.Split(',');

        bool bchecked = bool.Parse(spOwnerSetting[1].ToString());
        string norder = spOwnerSetting[2].ToString();
        Owners.Add(new CheckedListItem<Owner>(new Owner() { OwnerName = spOwnerSetting[0].ToString(), OwnerOrder = norder }, 
            isChecked: bchecked));
    }

    DataContext = this;
}


public class CheckedListItem<T> : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    private bool isChecked;
    private T item;
    private string order;

    public CheckedListItem()
    { }

    public CheckedListItem(T item, bool isChecked = false)
    {
        this.item = item;
        this.isChecked = isChecked;
    }

    public T Item
    {
        get { return item; }
        set
        {
            item = value;
            if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Item"));
        }
    }


    public bool IsChecked
    {
        get { return isChecked; }
        set
        {
            isChecked = value;
            if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("IsChecked"));
        }
    }

    public string Order
    {
        get { return order; }
        set
        {
            order = value;
            if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Order"));
        }
    }
}
}

The following line not working as intended

    Owners.Add(new CheckedListItem<Owner>(new Owner() { OwnerName = 
spOwnerSetting[0].ToString(), OwnerOrder = norder }, 
                isChecked: bchecked));

OwnerOrder = norder is not showing when the Window is opened. My TextBox binding in XAML is simply <TextBox Text ="{Binding Order}"/>

I've also tried the following with no success Owners.Add(new CheckedListItem<Owner>(new Owner() { OwnerName = spOwnerSetting[0].ToString() }, isChecked: bchecked, order: norder));

Any ideas?

Upvotes: 0

Views: 102

Answers (1)

michele
michele

Reputation: 2091

Order Property in CheckedListItem is never initialized. you can add a new ctor

public CheckedListItem(T item, string nrorder, bool isChecked = false)
{
   this.item = item;
   this.isChecked = isChecked;
   this.order = nrorder;
}

and change your adding method

Owners.Add(new CheckedListItem<Owner>(new Owner() { OwnerName = spOwnerSetting[0].ToString(), OwnerOrder = norder }, norder, isChecked: bchecked));

In my test app now is working.

Upvotes: 2

Related Questions