2017-09-08 2 views
0

PrismとUnityがWPF内でどのように動作するかを頭に入れようとしていますが、現在は簡単な作業でロードブロッキングされています。おそらく私はそれがどのように機能するかについて誤解を持ちます。WPF Prism/Unityを利用する際にバインドされたビューモデルをリセット/リフレッシュする方法

バインドされたビューモデルをどのように更新しますか?ユーザーが送信ボタンとクリアボタン(略称ユーザーに記入するために、私はフィールドを持っている私のユーザーコントロール内

<ContentControl Grid.Row="1" prism:RegionManager.RegionName="ContentRegion" x:Name="mainContent" HorizontalAlignment="Center" Margin="0,25,0,0"/> 

は、私は、ユーザーコントロールをロードするためのプリズムRegionManagerを使用してWPFアプリケーションを持っています私のフィールドの結合制御内容)

<TextBox Margin="10,3,15,0" Text="{Binding LastName, UpdateSourceTrigger=PropertyChanged}" MinWidth="150" materialDesign:HintAssist.Hint="*Last Name" Style="{StaticResource MaterialDesignFloatingHintTextBox}" FontSize="16"/> 
<Button Command="{Binding ClearCommand}" Style="{StaticResource MaterialDesignRaisedAccentButton}" Margin="0 12 8 0" Width="155" ToolTip="Discard information entered and reset form" Background="#FF990B0B" Foreground="#FFECE9E9" BorderBrush="DarkRed">Cancel and Discard</Button> 

は素晴らしい作品と私​​は私がフォームをリセットしたいメソッドを呼び出しますコマンドに私のボタンを結び付けています

public class CheckInViewModel : BindableBase 
{ 
    private IEventAggregator _eventAggregator; 

    private string _lastName; 
    public string LastName 
    { 
     get { return _lastName; } 
     set { SetProperty(ref _lastName, value); } 
    } 

    public DelegateCommand ClearCommand { get; set; } 

    private void ExecuteClear() 
    { 
     //reset form here 
    } 
    public CheckInViewModel(IEventAggregator eventAggregator) 
    { 
     _eventAggregator = eventAggregator; 
     ClearCommand = new DelegateCommand(ExecuteClear); 
    } 
} 

私はおそらく、ExecuteClearメソッドですべてのフィールドを手動でリセットすることができますが、これは実際には40以上のフィールドを扱うように、ちょっと厄介でエラーが発生するようです。

バウンドフィールドを完全に別のモデルに移動して、そのモデルをビューモデルのプロパティにすると、クリアメソッドで再インスタンス化できるようになりましたが、ビューを更新するようには見えません。私は最後のモデルをアンバインドして新しいモデルにバインドするメソッド呼び出しが欠けているはずですが、それを行う方法を理解することができず、そうすることに関する文書も見つけられません。

失敗した例:失敗した、あなたはExecuteClearでそれを更新するときPropertyChangedを上げていないcheckInModelプロパティで

public class CheckInViewModel : BindableBase 
{ 
    private IEventAggregator _eventAggregator; 
    public CheckInModel checkInModel { get; set; } 
    public DelegateCommand ClearCommand { get; set; } 

    private void ExecuteClear() 
    { 
     checkInModel = new CheckInModel(); 
    } 

    public CheckInViewModel(IEventAggregator eventAggregator) 
    { 
     checkInModel = new CheckInModel(); 
     _eventAggregator = eventAggregator; 
     ClearCommand = new DelegateCommand(ExecuteClear); 
    } 

} 


public class CheckInModel : BindableBase 
{ 

    private string _lastName 
    public string LastName 
    { 
     get { return _lastName; } 
     set { SetProperty(ref _lastName, value); } 
    } 

} 


<TextBox Margin="10,3,15,0" Text="{Binding checkInModel.LastName, UpdateSourceTrigger=PropertyChanged}" MinWidth="150" materialDesign:HintAssist.Hint="*Last Name" Style="{StaticResource MaterialDesignFloatingHintTextBox}" FontSize="16"/> 
<Button Command="{Binding ClearCommand}" Style="{StaticResource MaterialDesignRaisedAccentButton}" Margin="0 12 8 0" Width="155" ToolTip="Discard information entered and reset form" Background="#FF990B0B" Foreground="#FFECE9E9" BorderBrush="DarkRed">Cancel and Discard</Button> 

答えて

1

private CheckInModel _checkInModel; 
public ChechInModel CheckInModel 
{ 
    get { return _checkInModel; } 
    set { SetPropery(ref _checkInModel, value); } 
} 

private void ExecuteClear() 
{ 
    CheckInModel = new CheckInModel(); 
} 

<TextBox Text="{Binding CheckInModel.LastName}"/> 
<Button Content="Cancel and Discard" Command="{Binding ClearCommand}"/> 

から

変更して、あなたは問題ないはずです。

+0

それは私がそれを見落としたと信じることはできませんでした。それをキャッチしていただきありがとうございます。 –

関連する問題