まず第一に私の英語で申し訳ありません。
私はWP7アプリを開発しています、そして私はまだ持っていませんデータバインディング構造を完全に理解しました。データバインディングを通じて取得したデータを含むページがあります。データは.cs内で生成され、正常に機能します。
しかし、別のページにいくつかのデータがあります。データバインディングからも取得できますが、代わりにUI入力テキストから取得する必要があります。これは単純な、テキストボックスとテキストブロックだけなので、ユーザーはテキストボックスに何かを書くと、同じページ上のテキストブロックに表示されます。しかし、それはうまくいきません、テキストブロックは空のままです。
これは次のようなものです。
<TextBox Name="TestInput">
<TextBlock Text="{Binding TestText}">
上記はXAMLの内容です。
public partial class NewItem : PhoneApplicationPage
{
public String TestText { get; set; }
public NewItem()
{
InitializeComponent();
TestText = "TestInput.Text";
}
}
そして、これがC#に関するものです。
しかし!!これで終わりではありません。テキストブロックには何も表示されていませんでした。 テストテキスト プロパティ。このような:
TestText = "HELLO WORLD";
しかし、アプリが起動してページが読み込まれると、テキストブロックには何も表示されません。足りないものや間違ったことを理解していないだけです。
誰かがデータバインディング構造を片付けてくれるか、少なくとも自分が何をしたのかを説明して自分でそれを理解できるかどうかを説明できれば幸いです。
事前にみんなありがとう!
回答:
回答№1は0バインディング効果を得る前に、DataContextを割り当てる必要があります。テキストボックスに変更がある場合は、textchangedイベントにコードを記述します。
this.DataContext=TestText
実行する必要があるもう1つの変更は、実際にはプロパティを設定していないということです。
TestText=TestInput.Text
回答№2の場合は0
あなたの拘束力のある理解のために簡単な作業例。これに従ってください。 これはあなたがtextboxのデータをsomeproperty textboxTextにバインドするあなたのページです。そしてこのプロパティはtextbloackにもバインドされているので、あなたのtextbloackがフォーカスを得たとき、それはプロパティの取得に至り、自動的にそれを埋めます。
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<StackPanel Orientation="Horizontal" >
<TextBox x:Name="testTextbox" Height="50" Width="200" Text="{Binding TextboxText,Mode=TwoWay}" />
<TextBlock x:Name="testTextblock" Height="50" Width="1000" Text="{Binding TextboxText,Mode=OneWay}" Foreground="White" />
</StackPanel>
</Grid>
これはあなたが変更したinotifypropertyを実装する方法をあなたに示したあなたのpage.csクラスです。それは将来あなたを助けるでしょう..
public sealed partial class MainPage : Page,INotifyPropertyChanged
{
public MainPage()
{
this.InitializeComponent();
this.DataContext = this;
}
private string _TextboxText;
public string TextboxText
{
get
{
return _TextboxText;
}
set
{
_TextboxText = value;
FirePropertyChanged("TextboxText");
testTextblock.UpdateLayout();
}
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
}
public event PropertyChangedEventHandler PropertyChanged;
protected void FirePropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}