2

データ入力アプリケーションを作成していますが、アプリの「モード」の追加、編集、表示に問題があります。

シナリオ: ウィンドウから、ユーザーが 2 つのコンボ ボックスで項目を選択し、ボタンをクリックします。コンボ ボックスの選択が既存のレコードと一致しない場合、値を挿入する準備が整った新しいレコードでフォームが開きます。選択内容が既存のレコードと一致する場合、このレコードは、フォーム内のすべてのテキスト ボックスを「読み取り専用」モードで開く必要があります。ユーザーが既存のデータを変更したい場合は、フォームの [編集] ボタンをクリックして、テキスト ボックスを [編集可能] に設定します。

私はwpfを初めて使用しますが、私のvbaアプリでは、通常、TabControlのTabItemsをループしてからTabItemsのコントロールをループし、見つかったTextBoxコントロールのIsReadOnlyプロパティを設定するDataModeプロパティとToggleControlsメソッドを持っています「DataMode」プロパティに基づいています。ただし、これがwpfでたどる道なのかどうかは疑問です。

それで、私の質問は、上記のアプローチを使用しますか? その場合、TabItem のコントロールにアクセスするにはどうすればよいですか。これは機能しません: foreach (Control ctrl in MyTabCtrl) { //if Textbox do stuff }.

これが方法でない場合、誰かが私に方法を教えてもらえますか? テンプレート/スタイルの問題か、何らかの方法でデータを読み取り専用に設定し、TextBox の IsReadOnly プロパティをデータの状態にバインドすることに関係していると思います。編集:ああ、またはそのViewStateManagerのこと。そのすべてについて私はほとんど知りません。

4

2 に答える 2

2

簡単なアプローチは

コード ビハインドで、という名前の DependencyProperty を宣言します。IsReadOnly

public static readonly DependencyProperty IsReadOnlyProperty = DependencyProperty.Register(
            "IsReadOnly",
            typeof (bool),
            typeof (MainWindow)
            );

        public bool IsReadOnly
        {
            get { return (bool) GetValue(IsReadOnlyProperty); }
            set { SetValue(IsReadOnlyProperty, value); }
        }

Buttons Click イベントを実装して、IsReadOnly がfalseClickで取得されるようにします。

 private void Button_Click(object sender, RoutedEventArgs e)
    {
        IsReadOnly = false;
    }

を使用して TextBoxes をIsReadonlyプロパティにバインドします。DataBinding

   <TextBox IsReadOnly="{Binding Path=IsReadOnly, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}, Mode=OneWay}" />

このバインドは、コード ビハインドが自分のものではないことを前提としているDataContextため、CodeBehind が適用される Window/ UserControl に相対的にバインドする必要があります。

このようにして、TextBox はこのプロパティの変更をリッスンします。切り替えると、ReadOnly 状態が自動的に変更されます。

于 2012-08-02T06:27:48.483 に答える
-1

DataContext を使用できます:

tabControl の datacontext をレコードにバインドします (ボタン イベント クリックで this.Canvas.DataContext = _yourRecord をサンプルに書き込みます)。

public void bntEvent_Click(object sender, EventArgs e)
    {
        // Do matching and put the result in result field 
        MyTabCtrl.DataContext = false;
    }

データコンテキストでテキストボックスの IsReadOnly/IsEnable プロパティをバインドし、コンバーターを使用して true/false 値を返します

    <TextBox IsReadOnly="{Binding .}" />

コンバーターの詳細については、 http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspxを参照してください。

私があなたとあなたが私の下手な英語を理解するのを手伝ってくれることを願っています.

さようなら

于 2012-08-02T06:48:21.340 に答える