2

MainWindow から UserControl に値を渡したい! UserControl に値を渡すと、UserControl は MessageBox に値を表示しましたが、TextBox には値が表示されません。これが私のコードです:

MainWindow (UserControl に値を渡す)

try
{
    GroupsItems abc = null;
    if (abc == null)
    {
        abc = new GroupsItems();
        abc.MyParent = this;
        abc.passedv(e.ToString(), this);

    }
}
catch (Exception ee)
{
    MessageBox.Show(ee.Message);
}

ユーザーコントロール

public partial class GroupsItems : UserControl
{
    public MainWindow MyParent { get; set; }
    string idd = "";
    public GroupsItems()
    {
        InitializeComponent();
        data();
    }

    public void passedv(string id, MainWindow mp)
    {
        idd = id.ToString();
        MessageBox.Show(idd);
        data();
    }

    public void data()
    {
        if (idd!="")
        {
            MessageBox.Show(idd);
            texbox.Text = idd;
        }
    }
}

編集 ( BINDING および INotifyProperty を使用)

.....

   public GroupsItems()
      {
            InitializeComponent();
      }

    public void passedv()
    {
        textbox1.Text = Text;
    }

}

public class Groupitm : INotifyPropertyChanged
{

    private string _text = "";

    public string Text
    {
        get { return _text; }
        set
        {
            if (value != _text)
            {
                _text = value;
                NotifyPropertyChanged();
            }
        }
    }



    public event PropertyChangedEventHandler PropertyChanged;

    protected void NotifyPropertyChanged(String propertyName = "")
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
4

4 に答える 4

4

ここでの問題は参照です。

コード ビハインドで新しいオブジェクトを作成すると、新しいオブジェクトが作成されますが、これは xaml コードにあるオブジェクトとは異なります。したがって、次のコードを使用する必要があります。

<local:GroupsItems x:Name="myGroupsItems"/>

コード ビハインドでは、新しいオブジェクトを作成する必要はありません。XAML で追加したオブジェクトを使用する必要があります。

...
myGroupsItems.MyParent = this;
myGroupsItems.passedv(e.ToString(), this);
...

ソリューションの例(sampleproject) を次に示します。

于 2013-10-26T17:07:56.330 に答える
0

テキストボックスがまだ空であるdataときにコンストラクターを呼び出しています。プロパティを変更しても、それは変わりません。のみです。しかし、その時点では親セットはありません。も電話してください。idd""MyParentpassedvdatapassedv

于 2013-10-22T10:01:05.927 に答える
0

これを試して:

public partial class GroupsItems : UserControl
{
   //properties and methods

    private string idd="";

    public string IDD
    {
    get{return idd;}
    set{
        idd=value; 
        textBox1.Text=idd;
        }
    }

   //other properties and methods
}

使用法:

メインフォームで:

    abc = new GroupsItems();
    abc.IDD="sometext";
    MainGrid1.Children.Add(abc);   //Grid or any other container for your UserControl
于 2013-10-22T10:27:20.717 に答える