- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
你好,
我被一个问题困住了,我想不出解决办法。
由于我在基础设施和 wpf 方面没有太多经验,所以我首先创建了一个测试项目来尝试如何正确地完成它。
我有一个包含组合框的 xamComboEditor。
当我打开组合框时,我得到了一个带有“状态”表的 xamDataGrid。选择一行后,我需要将所选行的主键写入组合框。
我的问题是,当 RecordActivated()-Event 触发时,我得到了发送者对象,但我不知道如何从中读取我需要的数据。
当我使用 VisualStudio 监视列表工具查看发件人对象时,我可以找到我需要的数据,但我不知道如何获取它的值。
我需要获取发件人对象内的“行”值,该值已经非常隐藏,无法使用监视列表工具找到。搜索了一段时间后,我找到了正确的值。我在那里找到了它:
发件人 -> ActiveRecord -> 数据项 -> 行
测试.xaml.cs:
namespace WpfApplication1
{
public partial class test : Window
{
public test()
{
InitializeComponent();
runFASTWMVDataSetTableAdapters.StaatenTableAdapter staat = new runFASTWMVDataSetTableAdapters.StaatenTableAdapter();
combo.ItemsSource = staat.GetData().DefaultView;
}
//MainGrid2 is the grid which is in my combobox
private void MainGrid2_RecordActivated(object sender, Infragistics.Windows.DataPresenter.Events.RecordActivatedEventArgs e)
{
//combo is my comboBox object
combo.IsDropDownOpen = false;
//guess i need to somehow read the "row" from the sender object right here.
}
}
}
我将只发布 xaml 的部分,这非常重要,因为我有一个很长的 xaml。
测试.xaml:
<igWPF:XamComboEditor x:Name="combo" Margin="1,1,1,219" ComboBoxStyle="{DynamicResource ComboStyle}"
DisplayValueSource="{Binding SelectedItem, RelativeSource={RelativeSource Self}}">
<Grid x:Name="MainGrid" SnapsToDevicePixels="True">
<igWPF:XamDataGrid x:Name="MainGrid2" DataSource="{TemplateBinding ItemsSource}"
RecordActivated="MainGrid2_RecordActivated" GroupByAreaLocation="None" SelectedDataItemsScope="RecordsOnly"/>
</Grid>
</igWPF:XamComboEditor>
经过几个小时的努力和谷歌搜索后,我没有任何想法可以尝试,所以我想我可以向你们寻求帮助。希望我在为帖子格式化代码时没有删除任何东西,它在我的本地项目中确实像预期的那样工作。
如果我的帖子中出现语法错误,也很抱歉,英语不是我的母语。
最佳答案
您问问题已经有一段时间了,但我想回答您的问题,即使您不再使用网格也是如此。也许这个答案会对其他人有所帮助。
我创建了一个示例,它将向您展示:
我的示例包含以下类:
Person.cs
namespace XamDataGridDemo
{
public class Person
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public override string ToString()
{
return $"{LastName}, {FirstName} ({Age})";
}
}
}
MainWindow.xaml
<Window x:Class="XamDataGridDemo.MainWindow"
x:Name="Demo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ig="http://schemas.infragistics.com/xaml"
xmlns:dp="http://infragistics.com/DataPresenter"
xmlns:editors="http://infragistics.com/Editors"
Title="XamDataGridDemo" Height="350" Width="525"
DataContext="{Binding ElementName=Demo}"
>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="3*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="3*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!-- Reference InfragisticsWPF4.v16.1.dll -->
<!-- Reference InfragisticsWPF4.DataPresenter.v16.1.dll -->
<dp:XamDataGrid x:Name="FirstPersonGrid"
Grid.Row="0"
DataSource="{Binding Path=Persons}"
RecordActivated="PersonGrid_OnRecordActivated"
/>
<Separator Grid.Row="1" Margin="3" />
<Grid Grid.Row="2">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!-- Reference InfragisticsWPF4.Editors.v16.1.dll -->
<editors:XamComboEditor x:Name="Combo"
Grid.Row="0"
ItemsSource="{Binding Path=Persons}"
SelectedItem="{Binding ElementName=SecondPersonGrid, Path=ActiveDataItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
/>
<!-- Reference InfragisticsWPF4.DataPresenter.v16.1.dll -->
<dp:XamDataGrid x:Name="SecondPersonGrid"
Grid.Row="1"
DataSource="{Binding Path=Persons}"
/>
</Grid>
<Separator Grid.Row="3" Margin="3" />
<!-- Reference InfragisticsWPF4.Controls.Editors.XamComboEditor.v16.1.dll -->
<ig:XamMultiColumnComboEditor Grid.Row="4"
ItemsSource="{Binding Path=Persons}"
EmptyText="Select a Person ..."
SelectedValue="{Binding Path=SelectedItem.Id, RelativeSource={RelativeSource Self}}"
SelectionChanged="XamMultiColumnComboEditor_OnSelectionChanged"
/>
</Grid>
</Window>
MainWindow.xaml.cs
namespace XamDataGridDemo
{
using System.Collections.Generic;
using System.Windows;
using Infragistics.Controls.Editors;
using Infragistics.Windows.DataPresenter;
using Infragistics.Windows.DataPresenter.Events;
public partial class MainWindow : Window
{
public MainWindow()
{
this.Persons = new List<Person>
{
new Person { Id = 0, FirstName = "Horst", LastName = "Horstenson", Age = 55 },
new Person { Id = 1, FirstName = "Hilde", LastName = "Wild", Age = 45 },
new Person { Id = 2, FirstName = "Klaus", LastName = "Klausen", Age = 50 }
};
DataContext = this.Persons;
InitializeComponent();
}
public IList<Person> Persons { get; }
private void PersonGrid_OnRecordActivated(object sender, RecordActivatedEventArgs e)
{
var xamDataGrid = (XamDataGrid)sender;
var activePerson = xamDataGrid.ActiveDataItem as Person;
if (activePerson != null)
{
// if you want to do something with the properties
int id = activePerson.Id;
string firstName = activePerson.FirstName;
string lastName = activePerson.LastName;
int age = activePerson.Age;
MessageBox.Show($"You have selected {activePerson}", "Selected Person");
}
// Second Approch -- Your Watchlist
var record = xamDataGrid.ActiveRecord as DataRecord;
activePerson = record?.DataItem as Person;
if (activePerson != null)
{
MessageBox.Show($"You have selected {activePerson}", "Selected Person");
}
}
private void XamMultiColumnComboEditor_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
var xamMultiColumnComboEditor = (XamMultiColumnComboEditor)sender;
var activePerson = xamMultiColumnComboEditor.SelectedItem as Person;
if (activePerson == null)
{
return;
}
MessageBox.Show($"You have selected {activePerson}", "Selected Person");
// Have to add reference to InfragisticsWPF4.DataManager.v16.1.dll
if (xamMultiColumnComboEditor.SelectedValue is int)
{
int id = (int)xamMultiColumnComboEditor.SelectedValue;
MessageBox.Show($"You have selected the person with id: {id}", "Selected Value");
}
}
}
}
<强>1。如何从发送者对象中获取特殊值?
正如您在 void PersonGrid_OnRecordActivated(object sender, RecordActivatedEventArgs e)
中所见,我假设发送方是一个 XamDataGrid
并且我检查 ActiveDataItem
是我的 Person
类型的对象。
或者,如果您想遵循您的监视列表方法。您可以使用转换的 sender
并检查 ActiveRecord
是否是我的 Person
类型的 DataRecord
。
现在您可以使用“行”对象做任何您想做的事情。
<强>2。如何将 XamDataGrid 的 ActiveRecord 绑定(bind)到 XamComboEditor 的 SelectedItem?
我有点懒,所以我稍微缩短了第二个示例的内容,并在 XamComboEditor
之外使用了 XamDataGrid
,但它也应该在嵌套的网格,因为我将绑定(bind)与 ElementName 结合使用。
如您所见,我只是将 XamComboEditor
的 SelectenItem 绑定(bind)到 XamDataGrid
的 ActiveDataItem
。
SelectedItem="{Binding ElementName=SecondPersonGrid, Path=ActiveDataItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
我还使用 Mode=TwoWay
和 UpdateSourceTrigger=PropertyChanged
将 ActiveDataItem
设置为 SelectedItem
。
<强>3。 ComboBox 在 DataGrid 的嵌套类型中的另一种方法。
正如您已经尝试过的那样 infragistics您应该看一下 XamMultiColumnComboEditor
,顾名思义,这是一个包含您可以定义的列的组合框。您可以使用与 1. 中相同的方法从发件人处获取选定的 Person
。请参阅上面代码中的 void XamMultiColumnComboEditor_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
。为了满足您的需要,为了获得“row-id”,我将 SelectedValue 绑定(bind)到所选 Person
的 Id
属性。
SelectedValue="{Binding Path=SelectedItem.Id, RelativeSource={RelativeSource Self}}"
我使用了 Infragistics v16.1 并且必须将以下引用添加到我的项目中。
如果有什么不清楚或范围很广,请随时要求澄清。
关于c# - 使用 XamDataGrid 并尝试从 RecordActivated() 函数的发送者对象中获取特殊值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40990788/
我的一位教授给了我们一些考试练习题,其中一个问题类似于下面(伪代码): a.setColor(blue); b.setColor(red); a = b; b.setColor(purple); b
我似乎经常使用这个测试 if( object && object !== "null" && object !== "undefined" ){ doSomething(); } 在对象上,我
C# Object/object 是值类型还是引用类型? 我检查过它们可以保留引用,但是这个引用不能用于更改对象。 using System; class MyClass { public s
我在通过 AJAX 发送 json 时遇到问题。 var data = [{"name": "Will", "surname": "Smith", "age": "40"},{"name": "Wil
当我尝试访问我的 View 中的对象 {{result}} 时(我从 Express js 服务器发送该对象),它只显示 [object][object]有谁知道如何获取 JSON 格式的值吗? 这是
我有不同类型的数据(可能是字符串、整数......)。这是一个简单的例子: public static void main(String[] args) { before("one"); }
嗨,我是 json 和 javascript 的新手。 我在这个网站找到了使用json数据作为表格的方法。 我很好奇为什么当我尝试使用 json 数据作为表时,我得到 [Object,Object]
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我听别人说 null == object 比 object == null check 例如: void m1(Object obj ) { if(null == obj) // Is thi
Match 对象 提供了对正则表达式匹配的只读属性的访问。 说明 Match 对象只能通过 RegExp 对象的 Execute 方法来创建,该方法实际上返回了 Match 对象的集合。所有的
Class 对象 使用 Class 语句创建的对象。提供了对类的各种事件的访问。 说明 不允许显式地将一个变量声明为 Class 类型。在 VBScript 的上下文中,“类对象”一词指的是用
Folder 对象 提供对文件夹所有属性的访问。 说明 以下代码举例说明如何获得 Folder 对象并查看它的属性: Function ShowDateCreated(f
File 对象 提供对文件的所有属性的访问。 说明 以下代码举例说明如何获得一个 File 对象并查看它的属性: Function ShowDateCreated(fil
Drive 对象 提供对磁盘驱动器或网络共享的属性的访问。 说明 以下代码举例说明如何使用 Drive 对象访问驱动器的属性: Function ShowFreeSpac
FileSystemObject 对象 提供对计算机文件系统的访问。 说明 以下代码举例说明如何使用 FileSystemObject 对象返回一个 TextStream 对象,此对象可以被读
我是 javascript OOP 的新手,我认为这是一个相对基本的问题,但我无法通过搜索网络找到任何帮助。我是否遗漏了什么,或者我只是以错误的方式解决了这个问题? 这是我的示例代码: functio
我可以很容易地创造出很多不同的对象。例如像这样: var myObject = { myFunction: function () { return ""; } };
function Person(fname, lname) { this.fname = fname, this.lname = lname, this.getName = function()
任何人都可以向我解释为什么下面的代码给出 (object, Object) 吗? (console.log(dope) 给出了它应该的内容,但在 JSON.stringify 和 JSON.parse
我正在尝试完成散点图 exercise来自免费代码营。然而,我现在只自己学习了 d3 几个小时,在遵循 lynda.com 的教程后,我一直在尝试确定如何在工具提示中显示特定数据。 This code
我是一名优秀的程序员,十分优秀!