WPF工具包 - IntegerUpDown

时间:2011-10-04 20:06:34

标签: c# wpf user-controls wpftoolkit

如何从IntergerUpDown控件获取值? 我正在使用这个:http://wpftoolkit.codeplex.com/wikipage?title=NumericUpDown 以下是MainWindow.xaml的代码

 <extToolkit:IntegerUpDown Value="{Binding Mode=TwoWay, Path=CurrentCount}" HorizontalAlignment="Left" Margin="119,111,0,148" Increment="1" Maximum="10" Minimum="1" Width="100"/>

以下是MainWindow.xaml.cs的代码

 public int CurrentCount { get; set; }
 private void button1_Click(object sender, RoutedEventArgs e)
    {
        CurrentCount = 10;
         int len = Talker.BlahBlahBlah(textBox1.Text, CurrentCount);
    }

所以基本上我想将用户选择的值作为int传递给方法BlahBlahBlah。我是否需要创建视图模型并将其绑定到CurrentValue属性?能否请您提供示例代码,从UI中获取价值?

所以这是我的讲师班:

 class Talker
{
    public static int BlahBlahBlah(string thingToSay, int numberOfTimes)
    {
        string finalString = "";
        for (int i = 0; i < numberOfTimes; i++)
        {
            finalString = finalString + thingToSay + "\n";
        }

        MessageBox.Show(finalString);
        return finalString.Length;
    }
}

这是ViewModelBase中的方法:

    public virtual int CurrentCount
    {
        get { return _CurrentCount; }
        set
        {
            _CurrentCount = value;
            OnPropertyChanged("CurrentCount");
        }
    }

问题是如何将它们链接在一起?

和平

安德鲁

2 个答案:

答案 0 :(得分:3)

正确的,MVVM正确的方法是将Value绑定到ViewModel上的属性。

public int CurrentCount
{
    get { return _CurrentCount; }
    set
    {
        _CurrentCount = value;

    }
}

我建议Josh Smith's excellent article on MVVM.

您可能希望稍后执行的操作是从代码更新CurrentCount并使其在IntegerUpDown控件中正确反映。为此,您必须继承INotifyPropertyChanged接口。你可以使用他的ViewModelBase类来做到这一点。然后,您的ViewModel继承自ViewModelBase,可以致电OnPropertyChanged发送已更改的通知:

public int CurrentCount
{
    get { return _CurrentCount; }
    set
    {
        _CurrentCount = value;
        base.OnPropertyChanged("CurrentCount");            
    }
}

答案 1 :(得分:2)

一种方法是命名IntegerUpDown控件

<extToolkit:IntegerUpDown 
    x:Name="CurrentCountUpDown" 
    HorizontalAlignment="Left" 
    Margin="119,111,0,148" 
    Increment="1" 
    Maximum="10" 
    Minimum="1" 
    Width="100"/>

然后在事件处理程序中按名称引用该控件:

private void button1_Click(object sender, RoutedEventArgs e)
{
    int len = Talker.BlahBlahBlah(textBox1.Text, CurrentCountUpDown.Value);
}