您可以将属性添加到 App.xaml.cs,然后在控件中绑定到它。
第一种方法:作为 XAML 资源
您的型号:
public class MyViewModel
{
public int Hello { get; set; }
}
应用程序.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}}"/>