0

我正在我的 wpf 应用程序中处理文本框和组合框。我很抱歉标题很奇怪。好吧,这是场景:

xml:

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

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

视图模型类:

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");
        }
    }

这里我有三个要求:

  1. 通过SelectedId在 xaml 中使用,我可以选择 id,但我想从 viewmodel 类中设置我的组合框的 selectedid。即 int portorder = 2 PortModeList->SetSelectedId(portOrder)。我怎么能做这样的事情?还是他们有其他方法?

  2. 我需要将文本框中的条目数限制为 4。即在文本框中输入 1234,它不应让用户超过 4 位。

  3. 我想将文本格式设置OversampleRateBox为:0x__。即,如果用户想在变量中输入 23,那么我将文本设置为 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];

如果要限制 a 中的字符数TextBox,请使用以下MaxLength属性:

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

如果您想为 添加前缀OversampleRateBox,一个选项是在 setter 中测试 this 是否存在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 回答