有一个简单的XAML用户控件,我想将DataContext设置为后面的代码(xaml.cs)文件。
我想在XAML中设置DataContext和Itemssource,所以我可以使用属性ListOfCars填充组合框
XAML
<UserControl x:Class="Sample.Controls.MyControl"
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="85" d:DesignWidth="200">
<Grid Height="85" Width="200" Background="{StaticResource MainContentBackgroundBrush}">
<StackPanel Orientation="Vertical">
<ComboBox Height="23.338" x:Name="CarList" />
</StackPanel>
</Grid>
</UserControl>
背后的代码
public List<Cars> ListOfCars
{
get { return _store.ListCars(); }
}
换句话说,我不是在代码隐藏中这样做,而是如何在XAML中设置绑定
public MyControl()
{
InitializeComponent();
_store = new Store();
CarList.ItemsSource = _store.ListCars();
CarList.DisplayMemberPath = "Name";
}
答案 0 :(得分:1)
只需绑定ItemsSource
。
<ComboBox ItemsSource="{Binding ListOfCars}"/>
然后是UserControl:
<MyControl DataContext="{Binding *viewModel*}"/>
您必须绑定使用UserControl的DataContext
而不是定义,因为在定义中您不知道要绑定什么。 Combobox
自动位于控件的上下文中,因此您只需绑定到DataContext
,无需任何其他工作。
绑定到资源的示例:
<Application.Resources>
...
<viewmodels:ViewModelLocator x:Key="ViewModelLocator"/>
...
</Application.Resources>
<MyControl DataContext="{Binding Source={StaticResource ViewModelLocator}}"/>
这将创建ViewModelLocator的一个实例,然后将控件的DataContext绑定到该资源。
答案 1 :(得分:1)
Do not do that,你将把所有外部绑定搞砸到DataContext
。请改为使用UserControl.Name
和ElementName
绑定(或RelativeSource
)。