您可以將屬性添加到您的App.xaml.cs中,然後將其綁定到您的控件中。
1日的做法:爲XAML資源
你的模型:
public class MyViewModel
{
public int Hello { get; set; }
}
App.xaml.cs:
<Application x:Class="WpfApplication12.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:wpfApplication12="clr-namespace:WpfApplication12"
StartupUri="MainWindow.xaml">
<Application.Resources>
<wpfApplication12:MyViewModel x:Key="MyViewModel" />
</Application.Resources>
</Application>
小記:有沒有必要註釋對象x:Shared="True"
,因爲它是默認值,將返回相同的實例。 http://msdn.microsoft.com/en-us/library/aa970778.aspx
用戶控件:
<UserControl x:Class="WpfApplication12.UserControl2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid DataContext="{Binding Mode=OneWay, Source={StaticResource MyViewModel}}">
<TextBlock Text="{Binding Path=Hello}" />
</Grid>
</UserControl>
現在,因爲你的模式是一種資源,你可以通過創建一個屬性檢索:
public MyViewModel MyViewModel
{
get { return Application.Current.FindResource("MyViewModel") as MyViewModel; }
}
(你可能要存儲在該引用字段,但是。)
第二個辦法:如果由於某種原因,你更喜歡傳統的財產作爲一個傳統的財產
,這裏的語法:
注意,屬性是靜態的,靜態構造函數初始化。
public partial class App : Application
{
static App()
{
MyViewModel = new MyViewModel();
}
public static MyViewModel MyViewModel { get; set; }
}
綁定到它在你的用戶控件:
<Grid DataContext="{Binding Source={x:Static wpfApplication12:App.MyViewModel}}"/>
你能不能把你的視圖模型財產App.xaml.cs類? – Aybe
我不知道如何。在main.xaml.cs的構造函數中,我有'myViewModel = new MyViewModel(); this.DataContext = myViewModel();'我爲menu.xaml.cs使用相同的行。 – Unplug
很多[MVVM框架](http://stackoverflow.com/questions/5069783/which-mvvm-framework-is-the-best-framework-for-wpf-apps)有一個[IoC容器](http: //msdn.microsoft.com/en-us/magazine/jj991965.aspx),讓你解析ViewModel的同一個實例或者通過構造函數注入它。 –