为了解释我的问题,我做了一个小型演示应用程序我有一个带有几个TextColumns和一个ComboBoxColumn的DataGrid - TextColumns的Binding运行良好,但不适用于ComboBoxColumn .
数据来自这个简单的模型:
public class Model
{
public Model()
{
Text = "text";
ComboText = "T2";
}
public string Text { get; set; }
public string ComboText { get; set; }
}
我的ViewModel有两个集合:要在Datagrid中显示的模型列表以及要在Combobox下拉列表中显示的字符串列表(此列表以后应该不是静态的) .
public class MainWindowViewModel
{
private ObservableCollection<Model> _model;
public MainWindowViewModel()
{
_model = new ObservableCollection<Model>();
_model.Add(new Model());
ComboItems = new ObservableCollection<string>();
ComboItems.Add("T1");
ComboItems.Add("T2");
ComboItems.Add("T3");
ComboItems.Add("T4");
ComboItems.Add("T5");
}
public ObservableCollection<Model> Models
{
get
{
return _model;
}
}
public ObservableCollection<string> ComboItems
{ get; private set; }
}
在我的视图中,Code Behind我只将视图的DataContext设置为MainWindowView Model:
public partial class MainWindow : Window
{
public MainWindow()
{
DataContext = new ViewModels.MainWindowViewModel();
InitializeComponent();
}
}
我知道,我可以在这里设置ComboBox Itemssource(巫婆工作),但我以后无法从ViewModel访问此类来更新它 .
我将数据网格的Itemssource设置为Models,TextColumns的Binding很好 . 但是将ComboBoxColumns项目源设置为DataContext.ComboItems(或仅仅是ComboItems)不起作用 .
<Window x:Class="TestCombobox.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:TestCombobox"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<DataGrid AutoGenerateColumns="False" Name="MyDataGrid" ItemsSource="{Binding Models}">
<DataGrid.Columns>
<DataGridTextColumn Header="TextColumn" Binding="{Binding Text, UpdateSourceTrigger=PropertyChanged}"/>
<DataGridComboBoxColumn Header="Combo" ItemsSource="{Binding DataContext.ComboItems}" SelectedValueBinding="{Binding ComboText}" DisplayMemberPath="{Binding ComboText}"/>
<DataGridTemplateColumn Header="TemplateColumn">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding DataContext.ComboItems}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
任何解决方案/想法来解决这个问题谢谢你的帮助 .
1 回答
你必须使用
RelativeSource
:或
ElementName
: