5

これは質問ではありませんが、インターネット上で解決策を見つけることができなかった問題に対する私の答えです。

MVVM Silverlight アプリケーションで SearchText をクリアする際に問題が発生しました。SelectedItem と Text を消去できましたが、SearchText は取り残されました。これは読み取り専用であり、バインドによって変更することはできません。

例: 国のリストを含む AutoCompleteBox。ユーザーがオーストラリアに入りたい場合、この時点で「au」と入力すると、オーストリアとオーストラリアのリストが表示されます。その後、ユーザーはオーストラリアを選択して次に進むことができます。編集が終了したら、[保存] ボタンをクリックします。この時点で、新しいデータを入力するためにデータ フォームをクリアしたい場合があります。

SelectedItem および Text プロパティへのバインディングがあり、それらをそれぞれ 'null' および string.Empty に設定した場合でも、SearchText プロパティは残り、AutoCompleteBox はクリアされませんが、'au' が含まれます。

4

7 に答える 7

2

私はこれについてインターネット全体に投稿しましたが、コントロール自体については答えが得られなかったので、私のようにイライラしてしまう人を助けるかもしれない別の角度からそれを見つけました.

Silverlight ページをロードするために NavigationFrame を使用する Silverlight ナビゲーション テンプレート アプリケーションを使用しています。別のページに移動してデータ フォームに戻ると、SearchText がクリアされていることに気付きました。プロパティにバインドされた値はすべて有効なままで、すべての AutoCompleteBox で SearchText がクリアされただけです。そのため、PageConductor メソッドを使用して、NavigationFrame を ViewModel に挿入し、そこで refresh メソッドを呼び出すことができました。このメソッドは、Silverlight Firestarter イベントの John Papa のから取得しました。Refresh メソッドを IPageConductor インターフェイスに追加しただけなので、ページをリロードするような「PageConductor.Refresh()」を呼び出すことができます。これが誰かに役立つことを願っています。

于 2011-05-22T10:38:07.710 に答える
1

次のように、SelectedItem Binded プロパティの set 部分内の Text にバインドされたプロパティをクリアする必要があります。

    public string AnalisisText
    {
        get { return _analisisText; }

        set
        {
            if (_analisisText == value)
            {
                return;
            }

            _analisisText = value;

            RaisePropertyChanged(AnalisisTextPropertyName);
        }
    }

    public DatosAutoCompletaPedidosDetalleViewDTO AnalisisSelect
    {
        get { return _analisisSelect; }

        set
        {
            if (_analisisSelect == value)
            {
                return;
            }


            _analisisSelect = value;

            if (_analisisSelect == null) AnalisisText = "";

            RaisePropertyChanged(AnalisisSelectPropertyName);
        }
    }

したがって、プロパティ SelectedItem に null を設定すると、他のプロパティは "" に設定されます。

于 2011-11-24T04:06:05.497 に答える
1
var t = ProductCombo.ItemsSource;
ProductCombo.ItemsSource = null;
ProductCombo.Text = string.Empty;
ProductCombo.SelectedValue = null;
//ProductCombo.Text = string.Empty;
ProductCombo.ItemsSource = t;

これを試してください.それは私のために働いた

于 2011-06-29T17:12:25.003 に答える
0

最近、WPF アプリで同じ問題が発生しました。解決策は、SelectedItem にバインドされたオブジェクトを null に設定するのではなく、デフォルト値に設定することであることがわかりました。これを理解するのにしばらく時間がかかりました。したがって、あなたの例では、ではありませんがSelectedCountry = nullSelectedCountry = new SelectedCountry(). この場合、SearchText もクリアされます。この問題に関する私の SO 投稿を確認してください: Autocompletebox does not clear keyboard strokes

于 2012-09-15T08:10:39.067 に答える
0

var t = ProductCombo.ItemsSource; ProductCombo.ItemsSource = null; ProductCombo.Text = string.Empty; ProductCombo.SelectedValue = null; //ProductCombo.Text = string.Empty; ProductCombo.ItemsSource = t;

残念ながら、これはコード ビハインドであり、MVVM ソリューションが必要でした。

于 2011-07-03T17:40:04.687 に答える
-1

確かに SearchText プロパティは読み取り専用ですが、AutoCompleteBox の子コンポーネントを取得できます。

var searchText = autoCompBox.GetChildByType<TextBox>(item => item.Name == "Text");

これで、TextBox コンポーネントの Text プロパティを介して SearchText をリセットできます。

if (searchText != null) searchText.Text = string.Empty;

C# 6.0 では、より簡潔になります。

autoCompBox.GetChildByType<TextBox>(item => item.Name == "Text")?.Text = string.Empty;
于 2016-06-02T13:53:37.207 に答える