- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
示例代码:
class GameListViewModel {
private IGameRepository repository;
public GameViewModel GameViewModel { get; set; }
public ObservableCollection<GameViewModel> Games { get; set; }
public ObservableCollection<GenreViewModel> Genres { get; set; }
public ICommand AddGame_ { get; set; }
public GameListViewModel() {
repository = new DummyGameRepository();
GameViewModel = new GameViewModel();
Games = new ObservableCollection<GameViewModel>(repository.GameList().Select(game => new GameViewModel(game)));
Genres = new ObservableCollection<GenreViewModel>(repository.GameList().Select(game => game.Genre).Distinct().Select(genre => new GenreViewModel(genre)));
AddGame_ = new RelayCommand(AddGame, CanAddGame);
}
}
class Game {
public string Title { get; set; }
public string SubTitle { get; set; }
public int Pegi { get; set; }
public Genre Genre { get; set; }
}
XAML:
<DataGrid ItemsSource="{Binding Games}" AutoGenerateColumns="False" Margin="0,32">
<DataGrid.Columns>
<DataGridTextColumn Header="Title" Binding="{Binding Title}" />
<DataGridTextColumn Header="Sub-Title" Binding="{Binding SubTitle}" />
<DataGridTextColumn Header="Pegi" Binding="{Binding Pegi}" />
<DataGridTextColumn Header="Genre" Binding="{Binding Genre.Name}" />
<DataGridComboBoxColumn Header="Test" ItemsSource="{Binding Genres}" DisplayMemberPath="Name" />
</DataGrid.Columns>
</DataGrid>
问题是,我希望组合框动态显示添加到游戏中的所有可能类型。为此,我在 GameListViewModel 中创建了一个 ObservableCollection。这是行不通的!我现在已经为此苦苦挣扎了 2 个小时......后来我希望所选的值成为游戏中的流派。
最佳答案
啊哈,您已经发现了许多 WPF 开发人员困惑的根源 - DataGrid 不会将它的 DataContext 转发到列。您不能真正依赖列中的 ItemsSource={Binding Genres}"之类的语句,因为框架无法解析它。这非常烦人。
此外,您还没有设置 SelectedItemBinding - 这是一个工作示例:
xaml:
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.Resources>
<CollectionViewSource Source="{Binding Possibilities}" x:Key="possibilities"/>
</Grid.Resources>
<DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False" x:Name="dataGrid">
<DataGrid.Columns>
<DataGridComboBoxColumn Header="test"
SelectedItemBinding="{Binding Selection}"
ItemsSource="{Binding Source={StaticResource possibilities} }">
</DataGridComboBoxColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
CS 代码隐藏:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new ViewModel()
{
Items = new ObservableCollection<Item>()
{
new Item(){
Selection ="A"
}
}
};
}
}
public class Item : ViewModelBase
{
private string _selection = null;
public string Selection
{
get { return _selection; }
set { _selection = value; OnPropertyChanged("Selection"); }
}
}
public class ViewModel : ViewModelBase
{
private ObservableCollection<Item> _items = new ObservableCollection<Item>();
public ObservableCollection<Item> Items
{
get { return _items; }
set { _items = value; OnPropertyChanged("Items"); }
}
private ObservableCollection<string> _possibilities = new ObservableCollection<string>()
{
"A", "B", "C"
};
public ObservableCollection<string> Possibilities
{
get
{
return _possibilities;
}
set
{
_possibilities = value;
OnPropertyChanged("Possibilites");
}
}
}
public class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
var propChanged = PropertyChanged;
if (propChanged != null)
propChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
以下是一些有用的链接:这个应该工作: http://blogs.msdn.com/b/jaimer/archive/2008/11/22/forwarding-the-datagrid-s-datacontext-to-its-columns.aspx
这里显示的最后一个解决方案特别相关: http://blogs.msdn.com/b/vinsibal/archive/2008/12/17/wpf-datagrid-dynamically-updating-datagridcomboboxcolumn.aspx
关于c# - DataGridComboBoxColumn 不显示 ObservableCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27083769/
您好,我正在使用 WPF DataGrid,并且正在尝试使 ComboBox Column 正常工作。 当我查看网
我正在 WPF 中用 C# 3.5 编写一个应用程序。我想以编程方式将 C# 中的 DataGridComboBoxColumn 添加到 WPF 工具包 DataGrid。问题是控件本身似乎不存在,因
我有一个包含 2 列的数据网格。一列包含角色信息,另一列应该有一个包含可用用户列表的组合框。组合框中的数据与第一列中的数据无关。 组合框没有数据上下文,只有一个项目源,而且我似乎也无法使用绑定(bin
我想知道如何让 DataGridComboBoxColumn 在不处于编辑模式时显示所选项目的文本?是否可以使编辑模式下的组合框最初显示所选项目的文本? 这是我的 XAML:
加载数据网格时是否可以“暴露”WPF 工具包数据网格的 DataGridComboBoxColumn?默认情况下,您必须单击单元格才能显示组合框。我希望用户看到组合框可用,而无需单击单元格。我希望组合
我在 DataGrid 中有一个 DataGridComboBoxColum。我希望能够单击单元格一次并下拉组合框。目前我必须点击多次。
我有一个带有 DatagridComboBoxColumn 的数据网格,我想在用户从 ComboBox 中选择任何东西时触发事件 SelectionChanged,执行一些操作,我该怎么做任何建议,谢
我有一个带有 DataGridComboBoxColumn 的网格,我正在尝试更改单元格的前景色(不处于编辑状态)。 我知道我可以使用 DataGridTemplateColumn 解决这个问题,但我
我在 WPF 和 DataGridComboBoxColumn 中使用 Datagrid。请在下面找到代码: ...
当我单击 DataGridComboBoxColumn 中的单元格时,组合框变得可见,我可以选择项目。当我选择了一个项目时,它在顶部可见。但是,当单元格又名 ComboBox 因为我单击 DataGr
我正在尝试数据绑定(bind) DataGridComboBoxColumn 我在这里做错了什么,因
我正在使用 C#、.NET Framework 4.5.1、MVVM Light 框架和 Entity Framework 6.1.3 开发 WPF。 我有这个DataGrid在一个窗口中:
我有一个 ViewModel(其结构的伪代码): class ViewModel { public List Packages { get; set; } } enum Type {
我有一个 DataGrid,里面有几个 ComboBox 列。使用 ViewModel 中的 IDataErrorInfo 接口(interface)验证这些值。将鼠标悬停在适当的单元格上时,工具提示
我正在尝试将 T 的 ObservableCollection 绑定(bind)到 DataGrid 的 DataGridComboBoxColumn。 DataGrid 定义是:
我目前正在努力使用 C# WPF 中的 DataGridComboBoxColumn。 我有 ToolModel 类 class ToolModel { public long Id { ge
我在 WPF 项目的 DataGrid 中有一个 DataGridComboBoxColumn 设置如下: 但是当我运行该项目时,该列仅显示空白值,并且编辑模式下的组合框执行相同的操作。 DataG
示例代码: class GameListViewModel { private IGameRepository repository; public GameViewModel Gam
我有一个数据网格,在 DataGrid.AutoGeneratingColumn 事件中,我将一些列更改为 DataGridComboBoxColumns。 与此同时,我还想向该新组合框添加一个选择更
我是 WPF 的新手,我遇到了以下情况: class Person{ string Name; List ListAddresses; } 我有一个带有 ItemsSource 的
我是一名优秀的程序员,十分优秀!