プリズム6を使用してWPFでアプリケーションを開発しました。このコマンドで日付時刻を更新しようとしました。私は成功を収めずにコードを更新しようとしています。WPF MVVMコマンドが動作しません
EDIT 1:旧リンクから 追加されたコードは
クラスをOnedriveします
public class Employee : BindableBase
{
private int _id;
public int ID
{
get { return _id; }
set
{
SetProperty(ref _id, value);
}
}
private string _firstName ="YehudaEmp";
public string FirstName
{
get { return _firstName; }
set {SetProperty(ref _firstName , value); }
}
private string _lastName="DnaiEmp";
public string LastName
{
get { return _lastName; }
set
{
SetProperty(ref _lastName, value);
}
}
private int _phone;
public int Phone
{
get
{
return _phone;
}
set
{
SetProperty(ref _phone, value);
}
}
private string _email;
public string Email
{
get { return _email; }
set
{
SetProperty(ref _email, value);
}
}
private string _city;
public string City
{
get { return _city; }
set
{
SetProperty(ref _city, value);
}
}
private string _street;
public string Street
{
get { return _street; }
set
{
SetProperty(ref _street, value);
}
}
private string _state;
public string State
{
get { return _state; }
set
{
SetProperty(ref _state, value);
}
}
private DateTime? _lastUpdate;
public DateTime? LastUpdate
{
get { return _lastUpdate; }
set
{
SetProperty(ref _lastUpdate, value);
}
}
}
public class EmployeeViewModel :BindableBase
{
private Employee emop;
public string FirstName
{
get { return emop.FirstName; }
set
{
emop.FirstName = value;
}
}
public string LastName
{
get { return emop.LastName; }
set
{
emop.LastName = value;
}
}
public DateTime? lastUpdated
{
get { return emop.LastUpdate; }
set
{
emop.LastUpdate = value;
}
}
public DelegateCommand updateCommand { get; set; }
public EmployeeViewModel()
{
emop = new Employee();
updateCommand = new DelegateCommand(Execute , canExecute).ObservesProperty(()=>FirstName).ObservesProperty(() =>LastName);
}
private bool canExecute()
{
return !String.IsNullOrWhiteSpace(FirstName) && !String.IsNullOrWhiteSpace(LastName);
}
private void Execute()
{
lastUpdated = DateTime.Now;
}
}
XAML:
<Grid>
<StackPanel>
<Grid >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="2*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<TextBox Grid.Column="0" Grid.Row="0" Width="195" Height="30" Margin="5" Text="{Binding FirstName ,UpdateSourceTrigger=PropertyChanged}"/>
<TextBox Grid.Column="0" Grid.Row="1" Width="195" Height="30" Margin="5" Text="{Binding LastName , UpdateSourceTrigger=PropertyChanged}"/>
<TextBlock Text="{Binding lastUpdated,UpdateSourceTrigger=PropertyChanged}" Grid.Row="2" Grid.Column="1" FontSize="20"/>
<Button Name="updatebtn" Grid.Row="3" Grid.Column="1" Width="Auto" Height="30" Margin="5" Content="update" Command="{Binding updateCommand,Mode=TwoWay}"/>
</Grid>
</StackPanel>
</Grid>
任意のヘルプ?
質問に直接コードを入力してください –
なぜ「Employee.Name」にバインドしないのですか?これは私の意見では正しい方法でしょう。 –
'Command'は' Mode'を 'TwoWay'に設定できますか?私はそれがバインディングエラーを生成することを期待していますが、私は試みたことがないので、私は確かに分かりません。そのフォームが読み込まれたときに出力ウィンドウを確認し、バインディングエラーが表示されないことを確認します。結束が完全に失敗する可能性があります。 –