MVVMの起動時にviewmodelで関数を呼び出そうとしています。私はそれが正しいと思ったが、コードは決して関数呼び出しを打つことはない。ここでviewmodelのコールスタートアップ関数
は私のXAMLです:
<Window x:Class="TestWin.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:l="clr-namespace:Timeserver"
xmlns:viewmodel="clr-namespace:Timeserver.ViewModels"
Title="MainWindow"
Width="893"
Height="Auto"
Background="LightGray"
ResizeMode="NoResize"
SizeToContent="Height">
<Window.DataContext>
<viewmodel:MainWindowViewModel />
</Window.DataContext>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<i:InvokeCommandAction Command="{Binding LoadData}" />
</i:EventTrigger>
</i:Interaction.Triggers>
ここに私のviewmodel(必要な部品)です:
namespace TestWin.ViewModels
{
class MainWindowViewModel
{
private StructsModel model; // my model class
private ICommand loadDataCmd;
private ICommand showTimeWindowCmd;
private ICommand toggleExecuteCommand { get; set; }
private bool canExecute = true;
public bool CanExecute
{
get
{
return this.canExecute;
}
set
{
if (this.canExecute == value)
{
return;
}
this.canExecute = value;
}
}
public ICommand ToggleExecuteCommand
{
get
{
return toggleExecuteCommand;
}
set
{
toggleExecuteCommand = value;
}
}
public ICommand ShowTimeWindowCmd
{
//code here
}
public ICommand LoadDataCmd
{
get
{
return loadDataCmd;
}
set
{
loadDataCmd = value;
}
}
public void LoadData(object parameter)
{
model.GetData();
}
public MainWindowViewModel()
{
this.model = new StructsModel();
LoadDataCmd = new RelayCommand(LoadData, param => this.canExecute);
ShowTimeWindowCmd = new RelayCommand(ShowTimeWindow, param => this.canExecute);
toggleExecuteCommand = new RelayCommand(ChangeCanExecute);
}
public void ShowTimeWindow(object parameter)
{
//code here
}
public void ChangeCanExecute(object obj)
{
canExecute = !canExecute;
}
}
}
ヒットされていない問題の関数がLoadData()
です。私のモデルクラスでGetData()
が呼び出されていますが、その理由はわかりません。他に何を試すかわからない私は同じことをやっているので、他の質問を見ました。私の他の機能ShowTimeWindow
は全く同じ方法で設定され、ヒットします。
データバインディングがどのように機能するかわからないようです。私はWPFデータバインディングエンジンに慣れ親しむことをお勧めします。メソッドにバインドしようとしていますが、これは動作しません。 – dymanoid
私はより多くの研究をするつもりですが、私はこのサイトのような他の質問を見ていました:http://stackoverflow.com/a/17933290/2480598メソッドにコマンドをバインドすることができました。 – pfinferno
Binding LoadDataではなく、Binding LoadDataCmdであるべきですか? – Steve