我有以下(简化)风格:
<Style x:Key="MyStyle" TargetType="{x:Type CheckBox}">
<Setter Property="Background" Value="Blue" />
</Style>
Run Code Online (Sandbox Code Playgroud)
如果我在DataGridCheckBoxColumn中将它用作ElementStyle AND EditingElementStyle:
<DataGridCheckBoxColumn Binding="{Binding IsEnabled}"
ElementStyle="{StaticResource MyStyle}"
EditingElementStyle="{StaticResource MyStyle}" />
Run Code Online (Sandbox Code Playgroud)
然后,IsEnabled当我选中/取消选中行的复选框时,我的绑定不会切换.如果我删除ElementStyle,EditingElementStyle或两者,那么绑定更新没有问题.为什么是这样?!
此外,我尝试使用以下代码解决此问题:
<DataGridTemplateColumn>
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsEnabled}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
Run Code Online (Sandbox Code Playgroud)
但问题仍然存在.
我正在尝试将WPF中的数据网格绑定到我的ViewModel,以便它将更新对数据库的任何单元格更改,并允许用户删除行并添加新行.我有一部分工作,但无法找到ADD的ELEGANT解决方案并进行修改.这是xaml
<DataGrid AutoGenerateColumns="false" HorizontalAlignment="Left" Margin="26,41,0,0" Name="dataGrid1"
ItemsSource="{Binding Path=GetAllItems}" Height="200" VerticalAlignment="Top" Width="266" >
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Path=ItemListID}" Header="ID" Visibility="Hidden"/>
<DataGridTextColumn Binding="{Binding Path=ItemName}" Header="Name" Width="4*" />
<DataGridCheckBoxColumn Binding="{Binding Path=IsActive}" Header="Active" Width="*" />
</DataGrid.Columns>
Run Code Online (Sandbox Code Playgroud)
然后在我的视图模型方法中
private ObservableCollection< ItemsList> getAllItems()
{
using (var context = new InspectorGeneralEntities())
{
var query = from I in context.ItemsLists
select I;
var item = new ObservableCollection<ItemsList>(query.ToList());
return item;
}
}
Run Code Online (Sandbox Code Playgroud)
删除行或修改数据网格上的行不会流入数据库.
a)我需要在xaml代码中创建哪些其他绑定来检测这些事件
b)如何在视图模型中检测已删除的记录或已修改的项目,以便我可以更新datacontext(如果它不会自动更新).
我的ObservableCollection有三个项目,行在数据网格中始终显示.我无法将我的DataGrid的单个单元格转换为编辑模式.我尝试点击,点击,双击,F2,...,但整个行保持选中状态.如何让用户编辑数据网格.我在其他帖子中发现了类似的数据网格编辑问题,但没有人解决了我的问题.这是代码(WPF NetFramework 4.5).因此,只有第一列是不可编辑的(只读).
<DataGrid Name="myDataGrid" Grid.Row="2" AutoGenerateColumns="False" ItemsSource="{Binding}" IsReadOnly="False">
<DataGrid.Columns>
<DataGridTemplateColumn Header="name" IsReadOnly="True" Width="200" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="Formulation" Width="100" IsReadOnly="False">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding FormulationStr}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBlock Text="{Binding FormulationStr}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn Header="volume Diff" Width="100" IsReadOnly="False">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding volumeDiff}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBlock Text="{Binding volumeDiff}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud) 我正在尝试在单独的UserControl中创建DataGrid,其DataContext是T的List.
在后面的代码中,我创建一个List,填充列表,然后将其发送到UserControl的构造函数,在该构造函数上我有我正在尝试填充的DataGrid.
UserControl类如下.
public partial class QuotePreview : UserControl
{
private static SelectionList previewList = new SelectionList();
public SelectionList PreviewList
{
get { return previewList; }
}
public QuotePreview()
{
InitializeComponent();
}
public QuotePreview(SelectionList selectedOptions)
{
InitializeComponent();
previewList = selectedOptions;
QuotePreviewDataGrid.DataContext = previewList;
}
}
Run Code Online (Sandbox Code Playgroud)
而Xaml看起来像:
<DataGrid Name="QuotePreviewDataGrid"
AutoGenerateColumns="False"
ItemsSource="{Binding}">
<DataGrid.Columns>
<DataGridTextColumn Header="Model Number" Binding="{Binding ModelNumber}"/>
<DataGridTextColumn Header="Description" Binding="{Binding Description}"/>
<DataGridTextColumn Header="List Price per Unit" Binding="{Binding Price}"/>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
我也试过设置ItemSource
QuotePreviewDataGrid.ItemsSource = PreviewList;
Run Code Online (Sandbox Code Playgroud)
我也尝试过设置数据上下文和itemsource以及刷新:
QuotePreviewDataGrid.Items.Refresh();
Run Code Online (Sandbox Code Playgroud)
我在我的应用程序的其余部分设置为列表框的数据绑定工作完美.在列表框中,我将itemsource设置为{Binding},将ListItems绑定设置为{Binding Property}.后面的代码中设置的列表框的datacontext.
我的数据网格以相同的方式设置,但由于某种原因,网格内部没有显示任何内容.
当我浏览调试器并观察信息流时,我可以看到正在创建T列表,SelectionsList并将其传递给数据网格所在的用户控件的构造函数.我可以看到DataContext确实正在设置并显示列表中的项目,但是当我回到我的应用程序并尝试查看数据网格时,它是空白的.
任何帮助将不胜感激.在过去的一天半里,我一直在试图解决这个问题.谢谢! …
当我使用递归查看每个文件时,如何获取文件的大小?我收到了下一个错误:
project.exe已退出,代码为-1073741819
int dir_size(const QString _wantedDirPath)
{
long int sizex = 0;
QFileInfo str_info(_wantedDirPath);
if (str_info.isDir())
{
QDir dir(_wantedDirPath);
QStringList ext_list;
dir.setFilter(QDir::Files | QDir::Dirs | QDir::Hidden | QDir::NoSymLinks);
QFileInfoList list = dir.entryInfoList();
for(int i = 0; i < list.size(); ++i)
{
QFileInfo fileInfo = list.at(i);
if ((fileInfo.fileName() != ".") && (fileInfo.fileName() != ".."))
{
sizex += (fileInfo.isDir()) ? this->dir_size(fileInfo.path()) : fileInfo.size():
QApplication::processEvents();
}
}
}
return sizex;
}
Run Code Online (Sandbox Code Playgroud) 我想绑定ObservableCollection到wpf datagrid.我ObservableCollection不是空的,但是,我的数据网格保持空白:
public partial class Fenetre_EvtCode : Window
{
ObservableCollection<EvtCode> glb_ObservableEvtCode;
public Fenetre_EvtCode()
{
InitializeComponent();
EvtCode myEvt = new EvtCode();
glb_ObservableEvtCode = myEvt.GetAllEvtCode();
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的xaml:
<DataGrid Foreground="Aqua"
Name="myDataGridEvtCode"
AutoGenerateColumns="True"
HorizontalAlignment="Stretch"
Margin="0,0,0,0"
VerticalAlignment="Stretch"
Height="453"
ItemsSource="{Binding glb_ObservableEvtCode}" />
Run Code Online (Sandbox Code Playgroud)
我再说一遍:我看了调试,我ObservableCollection不是空的.
有谁知道为什么ma datagrid保持空?
我有一些问题将datagrid组合框映射ItemsSource到主datacontext.这是一些显示问题的演示代码.
我的课程
public class MyData
{
public string Name { get; set; }
public string Priority { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个连接到数据上下文的类,它看起来像这样
public class myMV
{
public ObservableCollection<MyData> MyItems { get; set; }
public List<string> PriorityTypes
{
get { return new List<string> { "High", "Normal", "Low" }; }
}
public myMV()
{
this.MyItems = new ObservableCollection<MyData>
{
new MyData { Name = "item1", Priority = "Low" },
new MyData { Name = "item2", Priority = "Normal" },
new …Run Code Online (Sandbox Code Playgroud) 我在这个项目中关注 MVVM。
我有 WPF 数据网格,
ItemsSource(ItemsSource="{Binding Documents}")绑定到ObservableCollection<Document>,
SelectedItem(SelectedItem="{Binding CurrentDocument, Mode=TwoWay}")绑定到WorkQueueDocument,
我还使用交互触发器来捕获鼠标的双击 - 以便在新窗口中加载选定的文档。
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding ShowViewerCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
Run Code Online (Sandbox Code Playgroud)
我已将数据网格的列定义/绑定到 WorkQueueDocument 类的相应属性。
<DataGrid.Columns>
<DataGridTextColumn Width="Auto"
MinWidth="100"
Header="Name"
Binding="{Binding Name}">
<DataGridTextColumn.ElementStyle>
<Style TargetType="{x:Type TextBlock}">
<Setter Property="Margin" Value="2,0,0,0" />
<Setter Property="ToolTip" Value="{Binding Name}" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<!-- Many Other Columns Here... -->
</DataGrid.Columns>
<DataGrid.ColumnHeaderStyle>
<!-- I have various designer style's properties defined here -->
</DataGrid.ColumnHeaderStyle>
Run Code Online (Sandbox Code Playgroud)
我应该在用户选择网格中的行(文档)时加载文档 - 对于该 CurrentDocument 属性定义如下: …
我有一个datagrid绑定到我的ViewModel上的集合.当窗口加载时,填充数据网格并设置SelectedItem.(我知道这是因为我有一个绑定到所选项目的详细视图.)但是该行未突出显示.如果我点击该行,它将突出显示并正常工作.
当默认选择时,如何使所选行突出显示?
<DataGrid IsSynchronizedWithCurrentItem="True" SelectionUnit="FullRow" RowHeaderWidth="0" VerticalScrollBarVisibility="Visible" HorizontalScrollBarVisibility="Visible" IsReadOnly="True" ItemsSource="{Binding Items}" SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Run Date" Binding="{Binding Path=RunDate, StringFormat={}{0:MM-dd-yy HH:mm:ss} }" />
<DataGridTextColumn Header="Description" Binding="{Binding Description}" />
<DataGridTextColumn Header="Duration" Binding="{Binding Duration}" />
<DataGridTextColumn Header="Deviation" Binding="{Binding Deviation}" />
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud) 我是WPF的初学者,并试图将ComboBox的Items绑定到ObservableCollection
我用过这段代码:
XAML
<Window x:Class="comboBinding2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="{Binding RelativeSource={RelativeSource Self}}"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ComboBox x:Name="cmbTest" ItemsSource="{Binding Path=cmbContent}" Width="200" VerticalAlignment="Center" HorizontalAlignment="Center" />
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
C#
public MainWindow()
{
cmbTest.ItemsSource = cmbContent;
cmbContent.Add("test 1");
cmbContent.Add("test 2");
InitializeComponent();
}
public ObservableCollection<string> cmbContent { get; set; }
Run Code Online (Sandbox Code Playgroud)
在我尝试调试之前,我没有在此代码上出现任何错误,它会抛出错误:
TargetInvocationError
PresentationFramework.dll中出现未处理的"System.Reflection.TargetInvocationException"类型异常
谁能告诉我我做错了什么?