0

XAML で定義されている ProgressBar の値を動的に更新したい:

<ProgressBar HorizontalAlignment="Center"
                 Height="90" Margin="0,-30,0,0" 
                 VerticalAlignment="Center" 
                 Width="600" x:Name="BarProgress" Value="{Binding Test}" Maximum="100" />  

ページのコントロールで、このクラスを定義しました:

public class TestData
{
    public double Test { get; set; }
}

LoadState メソッドでは、次のようになります。

TestData data = new TestData();
data.Test = downloadData.ProgressValue();
BarProgress.DataContext = data;

最後に、ファイルのダウンロードを担当するクラスには、ダウンロードの割合を返す ProgressValue 関数があります。バインディングは機能しているようですが、動的ではありません... ProgressBar には、downloadData.ProgressValue() に設定した最初の値しか表示されません...動的バインディングの正しい方法はどれですか?!?!

4

1 に答える 1

0

プロパティTestは通知しません。自動生成されたバッキング フィールドを使用するだけです。

ProgressValue()また、関数 ( ) からの値の型の戻り値を、オブジェクトではなくそのプロパティに割り当てています。これは、どの段階でもプロパティ変更通知が発生しないことを意味するため、データバインディングは値が変更されたことを認識しません。

TestDataクラスを拡張する必要があります。

public class TestData : INotifyPropertyChanged
{
    public double Test 
    { 
        get { return _test; } 
        set 
        { 
            _test = value;  
            OnPropertyChange("Test");
        }
    }

    private double _test;

    private void OnPropertyChange(string propertyName)
    {
        var handler = PropertyChanged;
        if (handler != null)
            handler(this, new PropertyChangedEventArgs(propertyName));
    }

    public event PropertyChanged;
}

(編集者からのコピペではなく、完全に記憶からタイプしたものです。タイプミスは許してください)

また、値を定期的に更新する (繰り返し呼び出してProgressValue()) か、更新された値をそのプロパティに入れる別の方法を考え出す必要があります。

于 2013-10-01T10:01:09.193 に答える