0

私はこれに似た質問がSOで数回尋ねられたことを知っています。しかし、それらのどれも私の問題に対処しておらず、それらの答えを理解するのにいくらかの困難があります。これが私の状況です。いくつかのデータItemsControlを使用ItemTemplateしてバインドしました。

<Window.Resources>        
    <DataTemplate x:Key="AdditionalFieldTemlate">
        <Grid>
            <TextBlock Text="{Binding InfoName}"/>
            <TextBox Text="{Binding InfoValue,Mode=TwoWay}" Name="CustomValue"/>
        </Grid>
    </DataTemplate>
</Window.Resources>
<Grid>
    <ItemsControl ItemsSource="{Binding AdditionalInformation}" x:Name="additionalInfo" ItemTemplate="{DynamicResource AdditionalFieldTemlate}"/>
</Grid>  

TextBoxをクリックしたら、テキストを空(データテンプレート内のすべてのテキストボックステキスト)に設定する必要がありますButton。これらのテキストボックスにアクセスする方法がわかりません。私を助けてください。

4

2 に答える 2

1

通常、TextBox(外観)にはアクセスしません....バインドされているデータにアクセスします。

したがって、コレクション内の「データ」を次のように変更できます。

foreach (var item in AdditionalInformation)
{
    item.InfoValue = "";
}

その後、「TextBoxes」は空になります。

....INotifyPropertyChangedによって使用されているクラスに実装していることを確認してください。これにより、プロパティが変更されたときに通知が発生します。AdditionalInformationInfoValue

于 2013-02-05T10:26:29.453 に答える
0

テキストボックス内のテキストは、クラスのInfoValueプロパティにデータバインドされます。次のようにクラスとプロパティを実装します。

class InfoClass: INotifyPropertyChanged
{
    private string _infoValue;

    ...

    public string InfoValue
    {
        get { return _infoValue; }
        set
        {
            _infoValue = value;
            OnNotifyPropertyChanged("InfoValue")
        }
    }

    ...

    public event PropertyChangedEventHandler PropertyChanged;

    private void OnPropertyChanged(string property)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(property));
    }
}

次に、ボタンクリックハンドラー(またはMVVMアプローチを使用した場合はコマンド)でcolinsmithが提案することを実行します。バインディングは変更が通知され、ビューが更新されます。

于 2013-02-05T10:36:55.823 に答える