0

モデルには、時間を秒単位で格納するプロパティが 1 つあります。UI では、1、5、10、15、30 分と 1 時間のオプションを持つラジオ ボタンと、コンボ ボックスに分と時間のオプションを持つカスタム値ラジオ ボタンを介してオプションを表示する必要があります。

カスタム値を選択すると、オプションとして分と時間を含むテキストボックスとコンボボックスの値がモデルに間隔を設定します。残りについては、コンバーターとそのパラメーターを使用して値を設定しています。それは次のとおりです。

 public class SamplingIntervalConverter : IValueConverter
    {
        static  int[] secondsArray = new int[]{60,300,600,900,1800,3600};
        object IValueConverter.Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            int dataSeconds = 0;
            int parameterSeconds = 0;
            if (int.TryParse(value.ToString(), out dataSeconds))
            {
                if(int.TryParse(parameter.ToString(),out parameterSeconds))
                {
                    if (dataSeconds == parameterSeconds)
                    {
                        return true;
                    }
                }
                else if (parameter.ToString().Equals("Custom") && !secondsArray.Contains(dataSeconds))
                {
                    return true;
                }
            }

            return false;
        }

        object IValueConverter.ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if ((bool)value)
            {
                int parameterSeconds = 0;
                if (int.TryParse(parameter.ToString(), out parameterSeconds))
                {
                    return parameterSeconds;
                }
            }
            return 0;
        }
    }

この問題を解決するより良い方法はありますか。これについて何か助けていただければ幸いです。

ありがとう :)

4

1 に答える 1

1

これらのボタンをすべて使用する必要がある場合は、ビュー モデルを使用するかどうかに応じて、ハンドラーを接続する、オブジェクトをそれらにClickバインドします。Command次に、コード ビハインドまたはビュー モデルで、seconds 値プロパティに追加することで、ボタンのクリックに反応するだけです。

個人的にTimeSpanは、秒の整数の代わりにオブジェクトを表示します。これは、nice StringFormatlike{0:HH:mm}を使用してユーザー フレンドリーな方法で期間を表示できるためです。次のようなことができます。

public TimeSpan Duration
{
    get { return TimeSpan.FromSeconds(LengthInSeconds); }
    set
    {
        if (TimeSpan.FromSeconds(LengthInSeconds) != value)
        {
            LengthInSeconds = (short)value.TotalSeconds;
            NotifyPropertyChanged("Duration");
        }
    }
}

または、現時点で WPF に最適なフリー タイム ピッカーは何ですか? をご覧ください。ユーザーが値を選択するために使用できるコントロールを投稿しTimeSpanます。

于 2013-08-16T10:58:08.727 に答える