0

wpfアプリでテキストボックスとコンボボックスに取り組んでいます。変なタイトルでごめんなさい。シナリオは次のとおりです。

Xaml:

<ComboBox ItemsSource="{Binding PortModeList}" SelectedItem="{Binding SelectedPortModeList, Mode=OneWayToSource}" SelectedIndex="0" Name="PortModeCombo" />

<TextBox Grid.Column="1" Text="{Binding OversampleRateBox}" Name="HBFilterOversampleBox" />

ViewModelクラス:

public ObservableCollection<string> PortModeList
    {
        get { return _PortModeList; }
        set
        {
            _PortModeList = value;
            OnPropertyChanged("PortModeList");
        }
    }

    private string _selectedPortModeList;
    public string SelectedPortModeList
    {
        get { return _selectedPortModeList; }
        set
        {
            _selectedPortModeList = value;                
            OnPropertyChanged("SelectedPortModeList");
        }
    }

    private string _OversampleRateBox;
    public string OversampleRateBox
    {
        get
        {
            return _OversampleRateBox;
        }

        set
        {
            _OversampleRateBox = value;
            OnPropertyChanged("OversampleRateBox");
        }
    }

ここに3つの要件があります。

  1. xamlで使用SelectedIdすることにより、IDを選択できますが、viewmodelクラスからコンボボックスのselectedidを設定したいと思います。つまり int portorder = 2 PortModeList->SetSelectedId(portOrder)。どうすればこのようなことができますか?または他のアプローチはありますか?

  2. テキストボックス内のエントリ数を4に制限する必要があります。つまり、1234がテキストボックスに入力されます。ユーザーが4桁を超えないようにする必要があります。

  3. OversampleRateBoxテキストの形式を0x__に設定したいと思います。つまり、ユーザーが変数に23 presentを入力したい場合は、テキストを0x23に設定する必要があります。基本的に、最初に0xが存在する必要があります。

助けてください :)

4

1 に答える 1

1

私は(あなたがしているように)のSelectedItemプロパティを使用しますComboBoxが、バインディングを双方向にします。次に、ビューモデルでSelectedPortModeList(と呼ばれるべき)を設定できます。SelectedPortMode

<ComboBox ItemsSource="{Binding PortModeList}" 
       SelectedItem="{Binding SelectedPortMode}" ...

ビューモデルの場合:

// Select first port mode
this.SelectedPortMode = this.PortModeList[0];

の文字数を制限する場合は、次のプロパティTextBoxを使用します。MaxLength

<TextBox MaxLength="4" ... />

にプレフィックスを追加する場合OversampleRateBox、1つのオプションは、のセッターにプレフィックスが存在するかどうかをテストし、存在しOversampleRateBoxない場合は、プライベートフィールドに割り当てる前に追加することです。

アップデート

TextBox文字列プロパティにバインドします。

<TextBox Grid.Column="1" Text="{Binding OversampleRateBox}" ... />

プロパティのセッターで、プライベートフィールドを設定する前に、入力が有効であることを確認してください。

public string OversampleRateBox
{
    get
    {
        return _OversampleRateBox;
    }

    set
    {
        // You could use more sophisticated validation here, for example a regular expression
        if (value.StartsWith("0x"))
        {
            _OversampleRateBox = value;
        }

        // Now if the value entered is not valid, then the text box will be refreshed with the old (valid) value
        OnPropertyChanged("OversampleRateBox");
    }
}

バインディングは双方向であるため、ビューモデルコードから値を設定することもできます(たとえば、ビューモデルコンストラクターで)。

this.OversampleRateBox = "0x1F";
于 2012-10-22T11:17:41.423 に答える