1

データ バインディングに関するオンライン ドキュメントを読みましたが、それでも機能しませんでした。私は単にデータバインディングを理解し、本来あるべき方法で物事を行いたいだけです。

これが私のUI.xaml.csのコードです

namespace mynamespace
{
   class Customer
   {
     private string _name = "TEST";
     public string Name
     {
        get { return this._name; }
        set { this._name = value; }
     }
   }

   public partial class UI: UserControl
   {
       public UI()
       {
           InitializeComponent();
           Customer c = new Customer();
           this.DataContext = c;
       }
   }
}

バインディング コード (ターゲットはテキスト ボックス) は次のようになります。

<TextBox Name="MyTextBox" Text="{Binding Path=Name}" />

テキストボックスに TEST と表示されるはずですが、そうではありません。テキストボックスには何もありません。ドキュメント (Data Binding Overview、Binding Declarations Overview、および Binding Sources Overview) は、私にはあまり明確ではありません。

これは、出力ウィンドウからのエラー メッセージです。

BindingExpression path error: 'Name' property not found on 'object' ''ConfigurationSettings' (HashCode=36012562)'. BindingExpression:Path=Name; DataItem='ConfigurationSettings' (HashCode=36012562); target element is 'TextBox' (Name='MyTextBox'); target property is 'Text' (type 'String')
4

4 に答える 4

1

私はなんてばかだ!デフォルトのコンストラクターとパラメーター化されたコンストラクターの 2 つのコンストラクターがあります。パラメーター化されたコンストラクターを呼び出していました。コードを移動した後:

       Customer c = new Customer();
       this.DataContext = c;

パラメーター化されたコンストラクターに対して、すべてが機能しました。

このばかげた間違いをお詫び申し上げます。

于 2013-09-09T19:51:59.437 に答える
0

インターフェイスを実装して、クラスでオーバーライドしてみてくださいINotifyPropertyChangedToString()Customer

public class Customer : INotifyPropertyChanged
{
    private string _name = "TEST";
    public string Name
    {
        get { return _name; }
        set { _name = value; NotifyPropertyChanged("Name"); }
    }

    public event PropertyChangedEventHandler PropertyChanged;

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

    public override string ToString()
    {
        return Name;
    }
}

それでもうまくいかない場合は、内部的にプライベート フィールドではなくName、コンストラクターで値を使用してプロパティを設定してみてください。Window

public Window()
{
    InitializeComponent();
    Customer c = new Customer() { Name = "TEST" };
    this.DataContext = c;
}
于 2013-09-09T09:51:50.820 に答える
0

マリオは正しいので、コードは次のようになります。

namespace mynamespace
{
   class Customer
   {
     private string _name = "TEST";
     public string Name
     {
        get { return this._name; }
        set { this._name = value; }
     }
   }

   public partial class Window : UserControl
   {
       public Window()
       {
           InitializeComponent();
           Customer c = new Customer();
           this.DataContext = c;
       }
   }
}
于 2013-09-09T08:50:20.933 に答える
0

Customer c が DataContext である場合、次のようにすべきではありません。

 <TextBox Name="MyTextBox" Text="{Binding Name}" />
于 2013-09-09T09:01:18.253 に答える