0

チェックボックスと一緒にウィンドウに追加される TextBox があります。TextBox をOrderCheckedListItem ハンドラーのプロパティにバインドすることができたので、変更が加えられると正しくバインドされて更新されます。

私が抱えている問題は、開始値で初期化できないことです。私のコンストラクタは次のとおりです

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"));
        }
    }
}
}

次の行が意図したとおりに機能しない

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

OwnerOrder = norderウィンドウを開いたときに表示されません。XAML での私の TextBox バインディングは単純です<TextBox Text ="{Binding Order}"/>

また、次のことを試しましたが、成功しませんでした Owners.Add(new CheckedListItem<Owner>(new Owner() { OwnerName = spOwnerSetting[0].ToString() }, isChecked: bchecked, order: norder));

何か案は?

4

1 に答える 1

2

CheckedListItem の Order プロパティは初期化されません。新しいctorを追加できます

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

追加方法を変更します

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

私のテストアプリでは現在動作しています。

于 2012-10-10T10:42:52.730 に答える