1

私は単純なクラスabcを持っています

class abc
        {
            public string a { get; set; }
            public string b { get; set; }
            public string c { get; set; }

            public abc(string d, string e, string f)
            {
                a = d;
                b = e;
                c = f;
            }
        }



public MainPage()
        {
            InitializeComponent();

            abc obj = new abc("abc1", "abc2", "abc3");
            LayoutRoot.DataContext = obj;


        }

および 3 つのテキスト ボックス 1 2 3 を含むグリッド クラスのこれら 3 つのプロパティをグリッド ユーザー コントロールにバインドしようとしています。

<Grid x:Name="LayoutRoot" Background="White">
        <TextBox Height="27" HorizontalAlignment="Left" Margin="125,86,0,0" Name="textBox1" Text="{Binding Path= a}" VerticalAlignment="Top" Width="120" />
        <TextBox Height="25" HorizontalAlignment="Left" Margin="21,192,0,83" Name="textBox2" Text="{Binding Path= b}"  Width="120" />
        <TextBox Height="25" HorizontalAlignment="Left" Margin="250,192,0,0" Name="textBox3" Text="{Binding Path= c}" VerticalAlignment="Top"  Width="120" />
    </Grid>

エラーは表示されませんが、画面への出力は表示されません。具体的な問題は何ですか?

4

2 に答える 2

0

まず、タイプ「abc」は INotifyPropertyChanged を実装する必要があります。

public class abc : INotifyPropertyChanged
{
    ...
}

INotifyPropertyChanged次に、 .PropertyChanged イベントを発生させる必要があります

private void RaiseProperty(string propertyName)
{
    var handle = PropertyChanged;
    if(handle != null)
    {
        handle(this, new PropertyChangedEventArgs(propertyName));
    }
}

private string _a;
public string a { get{ return _a;} set{ _a = value; RaiseProperty("a"); } }

....

CLR プロパティを使用している場合は、Binding を通知するメカニズムが必要なため、これは機能するはずです。そのメカニズムはINotifyPropertyChangedインターフェースによって提供されます

于 2012-05-29T05:55:20.403 に答える
0

バインド式で "Path= " (スペースを含む) を使用しないようにしてください。使用してみてください:

Text="{Binding a}"

「パス」は束縛式に隠れて存在します。バインディングに関するリソースを読む必要があります。

于 2012-05-29T07:22:38.950 に答える