2017-09-08 139 views
0

我在試圖總結我的周圍棱鏡和Unity如何WPF中工作頭上的過程,但目前已經由簡單的任務包版廣告時,如何重置/刷新綁定視圖模型。可能我對它的工作原理有誤解。WPF利用棱鏡/統一

怎樣才能刷新綁定視圖模型?

我有使用棱鏡RegionManager WPF應用程序加載了一個用戶控件:

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

在我的用戶控件我有一個字段的用戶與一個提交按鈕和清除按鈕(簡稱用戶填寫控制內容)

<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+場處理。

我試着將我的綁定字段移動到一個完全獨立的模型,然後使該模型成爲我的視圖模型的一個屬性,以便我可以在clear方法中重新實例化它,但似乎並沒有在更新視圖時進行更新。我想我必須錯過一個方法調用來解除綁定我的最後一個模型,並重新綁定到新的,但我不知道如何去做,也找不到任何文檔。

嘗試失敗例子:

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

在你失敗的嘗試,當你在ExecuteClear更新checkInModel不提高PropertyChanged財產。

將其更改爲

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

就是這樣,不敢相信我忽略了這一點。感謝您接收它。 –