数据网格中的组合框使用 mvvm 和 caliburn.micro
combobox in datagrid using mvvm and caliburn.micro
几天来我一直在尝试使用 MVVM 和 Caliburn.Micro 在数据网格中添加组合框。
我已经尝试了几乎所有我能找到的建议 - 运气不好!
我的 Xaml 在用户控件中 - 名称和测试显示正常!
XAML:
<DataGrid x:Name="Players" AutoGenerateColumns="False" Height="200" HorizontalAlignment="Left" VerticalAlignment="Top" Width="308">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Test" Binding="{Binding Position}"/>
<DataGridComboBoxColumn x:Name="ComboBoxColumn" Header="Position" SelectedItemBinding="{Binding Position}"/>
</DataGrid.Columns>
</DataGrid>
ViewModel:
public class MissingCTypeViewModel : Screen, INotifyPropertyChanged
{
public ObservableCollection<Player> Players { get; set; }
public ObservableCollection<string> Positions { get; set; }
public MissingCTypeViewModel()
{
Positions = new ObservableCollection<string>() { "Forward", "Defense", "Goalie" };
Players = new ObservableCollection<Player>(){
new Player() {Name = "Tom",Position= "Forward"},
new Player() {Name = "Dick", Position= "Defense"},
new Player() {Name = "Harry", Position= "Goalie"}
};
//ComboBoxColumn.ItemsSource = Positions;
//dataGrid1.ItemsSource = Players;
}
}
public class Player
{
public string Name { set; get; }
public string Position { set; get; }
}
结果:
您缺少 DataGridComboBoxColumn
ItemsSource
绑定到 Positions
集合。
请注意,您需要将其作为 static 资源 - 请参阅:Binding ItemsSource of a ComboBoxColumn in WPF DataGrid
XAML:
xmlns:vm="clr-namespace:TheNamespeceOfYourApp.ViewModels"
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Test" Binding="{Binding Position}"/>
<DataGridComboBoxColumn x:Name="ComboBoxColumn" Header="Position" SelectedItemBinding="{Binding Position}" ItemsSource="{Binding Source={x:Static vm:MissingCTypeViewModel.Positions}}"/>
</DataGrid.Columns>
视图模型:
public static List<string> Positions = new List<string>() { "Forward", "Defense", "Goalie" };`
几天来我一直在尝试使用 MVVM 和 Caliburn.Micro 在数据网格中添加组合框。
我已经尝试了几乎所有我能找到的建议 - 运气不好!
我的 Xaml 在用户控件中 - 名称和测试显示正常!
XAML:
<DataGrid x:Name="Players" AutoGenerateColumns="False" Height="200" HorizontalAlignment="Left" VerticalAlignment="Top" Width="308">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Test" Binding="{Binding Position}"/>
<DataGridComboBoxColumn x:Name="ComboBoxColumn" Header="Position" SelectedItemBinding="{Binding Position}"/>
</DataGrid.Columns>
</DataGrid>
ViewModel:
public class MissingCTypeViewModel : Screen, INotifyPropertyChanged
{
public ObservableCollection<Player> Players { get; set; }
public ObservableCollection<string> Positions { get; set; }
public MissingCTypeViewModel()
{
Positions = new ObservableCollection<string>() { "Forward", "Defense", "Goalie" };
Players = new ObservableCollection<Player>(){
new Player() {Name = "Tom",Position= "Forward"},
new Player() {Name = "Dick", Position= "Defense"},
new Player() {Name = "Harry", Position= "Goalie"}
};
//ComboBoxColumn.ItemsSource = Positions;
//dataGrid1.ItemsSource = Players;
}
}
public class Player
{
public string Name { set; get; }
public string Position { set; get; }
}
结果:
您缺少 DataGridComboBoxColumn
ItemsSource
绑定到 Positions
集合。
请注意,您需要将其作为 static 资源 - 请参阅:Binding ItemsSource of a ComboBoxColumn in WPF DataGrid
XAML:
xmlns:vm="clr-namespace:TheNamespeceOfYourApp.ViewModels"
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Test" Binding="{Binding Position}"/>
<DataGridComboBoxColumn x:Name="ComboBoxColumn" Header="Position" SelectedItemBinding="{Binding Position}" ItemsSource="{Binding Source={x:Static vm:MissingCTypeViewModel.Positions}}"/>
</DataGrid.Columns>
视图模型:
public static List<string> Positions = new List<string>() { "Forward", "Defense", "Goalie" };`