您可以像往常一樣綁定:
<ContentControl Content="{Binding Path=PropertyWithUI}"/>
而在代碼:
public UIElement PropertyWithUI
{
get
{
return propertyWithUI;
}
set
{
propertyWithUI = value;
// notify property changed here
}
}
但它不是最好的方法,這是更好地把你的窗戶上都控制和他們的知名度屬性綁定到虛擬機中的屬性。
EDIT:
下面是一個例子:
在XAML我有一個內容控制和一個按鈕:
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<ContentControl Grid.Row="0" Content="{Binding Path=Control}"></ContentControl>
<Button Grid.Row="1" Height="40" Click="Button_Click">Change control</Button>
</Grid>
而在代碼:
一個微小的自定義MVVM:
public class MyMVVM : INotifyPropertyChanged
{
private UIElement control;
public UIElement Control
{
get { return control; }
set
{
if (control == value)
return;
control = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("Control"));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
等窗口代碼。我創建了一個VM的實例,並用一個新的TextBox初始化Control屬性;
readonly MyMVVM mvvm = new MyMVVM();
public MainWindow()
{
InitializeComponent();
DataContext = mvvm;
mvvm.Control = new TextBox() {Text = "this is a text box"};
}
當用戶單擊我時,將控件更改爲其他。
private void Button_Click(object sender, RoutedEventArgs e)
{
var wb = new WebBrowser();
mvvm.Control = wb;
wb.Navigate("http://stackoverflow.com");
}
您可以在家中試用:)創建新的WPF項目並將代碼放在上面。
可以在網格中疊加兩個控件,並從視圖模型中切換每個控件的可見性。 –