我有一個應用程序,我在GroupBox中顯示UserControls。爲了顯示控件,我綁定了主窗體的ViewModel中的一個屬性,該窗體返回一個ViewModel來顯示。我已經設置了DataTemplates,以便表單自動知道使用哪個UserControl/View來顯示每個ViewModel。WPF View在關閉時將ViewModel屬性設置爲null
當我顯示一個不同的UserControl時,我保持前一個控件的ViewModel處於活動狀態,但視圖被WPF自動丟棄。
我遇到的問題是,當視圖關閉時,對ViewModel中的屬性的任何雙向綁定立即設置爲null,因此當我再次顯示ViewModel時,所有的值都剛剛設置在UI中爲null。
我認爲這是因爲作爲View關閉的一部分,它會處理和清除它所包含的控件中的任何值,並且由於綁定已就位,它們也向下傳播到ViewModel。
的DataTemplates在我的資源
<DataTemplate DataType="{x:Type vm:HomeViewModel}">
<vw:HomeView />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:SettingsViewModel}">
<vw:SettingsView />
</DataTemplate>
<DataTemplate DataType="{x:Type vm:JobListViewModel}">
<vw:JobListView />
</DataTemplate>
代碼用於顯示用戶控制我在視圖中的一個正在結合的控制的
<GroupBox>
<ContentControl Content="{Binding Path=RightPanel}" />
</GroupBox>
實施例:
<ComboBox Name="SupervisorDropDown" ItemsSource="{Binding Path=Supervisors}" DisplayMemberPath="sgSupervisor"
SelectedValuePath="idSupervisor" SelectedValue="{Binding Path=SelectedSupervisorID}" />
和相關的ViewModel屬性:
public ObservableCollection<SupervisorsEntity> Supervisors
{
get
{
return supervisors;
}
}
public int? SelectedSupervisorID
{
get
{
return selectedSupervisorID;
}
set
{
selectedSupervisorID = value;
this.OnPropertyChanged("SelectedSupervisorID");
}
}
任何想法如何停止我的視圖null值我的ViewModels中的值?我在想,也許我需要將View的DataContext在關閉之前設置爲null,但我不確定如何通過當前綁定的方式來解決此問題。
我遇到同樣的問題。將Visual兒童的DataContext設置爲null部分解決了它。隱藏視圖而不是銷燬視圖沒有任何區別。我仍在尋找完整的解決方案。 – HappyNomad 2010-11-23 19:00:29