1

elementhost を使用してビューを表示する winform があります。私のwinformには、ビューのボタンがクリックされたときに非表示にしたいwinformボタンがあります。これを達成する方法はありますか?ビューのビューモデルを介して winform とやり取りする方法を知りたいだけです。

form.cs

VModel.DisableBtn += new ViewModel.EventHandler(_viewmodel_DisableExitFormButton); 

void _viewmodel_DisableExitFormButton()
{
    btnExitForm.Enabled = false;
}

xaml

<Button Name="btnSave" Command="{Binding SaveToDatabase}" />

ビューモデル

private ViewModel _viewModel;

private ViewModel VModel
{
    get
    {
        if (_viewModel == null)
        {
            _viewModel = new ViewModel();
        }

        return _viewModel;
    }
    set
    {
        _viewModel = value;
    }
}

public delegate void EventHandler();
public event EventHandler DisableBtn;

public ICommand SaveToDatabase
{
    get
    {
        if (SaveToDatabase == null)
        {
            SaveToDatabase = new RelayCommand(p => SaveToDB());
        }

        return SaveToDatabase;
    }
}

private void SaveToDB()
{
    DiasbleExitFormBtn();
}

private void DisableExitFormBtn()
{
    // need to disable form button here
}
4

2 に答える 2

0

Winfrom では、View のボタンを押したときに再生される ViewModel のイベントに登録し、このイベントが発生したときにボタンを非表示にすることができます。

例えば:

ビューモデル:

public delegate void SomeHandler();

public event SomeHandler YourEventName;

winfrom でこのイベントに登録します。

YourViewModel.YourEventName+=new YourViewModel.SomeHandler(Event_YourEventName);

      void Event_YourEventName()
        {
            //HIDE YOUR BUTTON
        }

ビューでボタンが押されたときにコマンドでイベントを実行します。

この助けを願っています

編集:

これをビューモデルに追加します

   private void OnButtonClicked()
    {
        if (YourEventName!= null)
        {
            YourEventName();
        }
    }

そして、この関数へのコマンド呼び出しで

private void DisableExitFormBtn()
{
    OnButtonClicked();
}

これにより、イベントが発生し、winfrom にある関数が実行されます。

于 2013-02-20T06:46:40.083 に答える
0

DisableBtn イベントを発生させるには、このコードを追加する必要があります。

 private void DisableExitFormBtn()
    {
        if(DisableBtn!=null)
          {
            EventArgs e = new EventArgs();
            DisableBtn(this, e);
          }
        // need to disable form button here
    }

以下を変更します。

public delegate void EventHandler(); // Comment this line or remove it
public event EventHandler DisableBtn;

これを次のように変更します。

void _viewmodel_DisableExitFormButton(object sender, EventArgs e)
{
    btnExitForm.Enabled = false;
}
于 2013-02-20T14:19:52.007 に答える