2017-07-19 7 views
0

Minimumプロパティを使用すると、UWPのXamarins Sliderで望ましくない動作が発生しました。さんはXamarin Sliderの最小値がUWPでリセットされました

<Slider Value="{Binding SliderValue}" Maximum="20" Minimum="10"/> 

public double SliderValue { get; set; } = 15; 

にバインドされている。これは、スライダーの初期位置が正確に真ん中になければならないことを意味しましょう。 But:起動時に、Sliderが値(15)を取得した後、値を最小値(10)に戻します。スライダは最小の左の位置にあります。 Minimum="0"を使用すると、スライダはその値を元に戻すことはなく、最初の位置は予想通りです。私はXAMLでスライダのプロパティの順序を変更しようとしましたが、結果は同じです。

Androidでアプリを実行すると問題は発生しません。 Androidはバインドされた値を最小限に戻していません。

誰かが問題となる可能性がありますか、それを修正する方法がありますか?

+0

あなたは<スライダー最大= "20"、最小は= "10" の値= "{バインディングSliderValue}" />のようなものを試してみました。私はそれがうまくいくかどうかはわかりませんが、UWPは最大値または最小値が変更されたときに値をリセットします。 –

+0

はい@IvanIčin私もこの振る舞いについて考え、すべての可能な組み合わせを成功させずに試しました。 – Fruchtzwerg

+0

それから私が知っている唯一の答えはTwoWayバインディングを持ち、そこで値を扱うことです。あなたがそれを受け入れて、propertychangedを送信しない意味がない10になるためのスライダの要求が表示された場合。私は以下に投稿します。 –

答えて

0

解決方法2: 最大値と最小値が一定の場合、解決策1は複雑すぎます。私はすべての3つの値バインディングを示唆している:あなたはViewModelにしintializeときに適切な順序でこれらの値を設定することが保証そして

<Slider Value="{Binding SliderValue, Mode = TwoWay}" 
Maximum="{Binding Maximum, Mode = OneWay}" 
Minimum="{Binding Minimum, Mode = OneWay}"/> 

をと(あなたが適切に動作するために、ビューを初期化する際に、これを行うために必要になる場合があります) :

Minimum = 10; 
Maximum = 20; 
SliderValue = 15; 

ソリューション1: はたぶん、より良い答えがありますが、私は唯一の結合TwoWayを使用することをお勧めすることができます

<Slider Value="{Binding SliderValue, Mode = TwoWay}" Maximum="20" Minimum="10"/> 

は、その後のViewModelに、あなたは次のような状況に対処:

private double sliderValue = 15; 
public double SliderValue 
{ 
    get 
    { 
     return sliderValue; 
    } 
    set 
    { 
     if (logicToCheckIfValueMakesSense()) 
     { 
      sliderValue = value; 
     } 
     onPropertyChanged(nameof(SliderValue)); 
    } 
} 
関連する問題