0

Settings というオブジェクトがあります。bool 型の BusyDoingAction というプロパティがあります。

public class Settings : ObservableObject
    {
        private bool busyDoingAction;
        public bool BusyDoingAction 
        {
            get { return this.busyDoingAction; }
            set
            {
                this.busyDoingAction= value;
                OnPropertyChanged(() => BusyDoingAction);
            }
        }

FileAdding という別のクラスがあります。

private readonly string[] files;
private bool busy;
public FileAdding(string[] files, bool busyAction)
        {
            this.files = files;
            this.busy= busyAction;
        }

今、私のViewModelには次のものがあります:

var fileAdding = new FileAdding(files, Settings.BusyDoingAction);            

            if (!fileAdding.Initialize())
                return;

            Task<bool>.Factory.StartNew(() =>
            {
                fileAdding.Execute(CToken);
                return fileAdding.Deinitialize();
            }, CToken);
        }

そして FileAdding Initialize() 関数には次のものがあります。

public bool Initialize()
        {
           busy  = true;
           return true;
        }

public bool Deinitialize()
         {
           busy  = false;
           return true;
         }

問題は、BusyDoingAction が FileAdding で変更されておらず、そのプロパティの値が変更されたという通知を取得していないことです..

プロパティはアプリケーションの mainGrid にバインドされており、それを使用してアプリケーションがビジーかどうかを検出し、BusyDoingAction の値に応じてグリッドを有効/無効にします。

何が間違っているのかわかりませんが、そのbusyDoingAction.Intialize/Deinitialize関数でBusyDoingActionのプロパティ値を設定する必要があります..

どんな助けでも本当に感謝しています..

4

2 に答える 2

1

やっている:

var fileAdding = new FileAdding(files, Settings.BusyDoingAction);

現在の値またはSettings.BusyDoingActionをコピーするだけですFileAction.busy

Settings.BusyDoingActionとの間にリンクはありませんFileAdding.busy

問題を解決する 1 つの方法は、Settings参照をに渡すことFileAddingです。

private readonly string[] files;
private readonly Settings settings;
public FileAdding(string[] files, Settings settings)
{
    this.files = files;
    this.settings = settings;
}

そして、次のように:

public bool Initialize()
{
   this.settings.BusyDoingAction = true;
   return true;
}

public bool Deinitialize()
{
   this.settings.BusyDoingAction = false;
   return true;
}
于 2013-09-19T08:46:29.953 に答える