我想使用 XML 文档的数据绑定来填充一个简单的表单,该表单显示有关人员列表的详细信息。我已经把一切都设置好了,现在就这样工作:
<Window x:Class="DataBindingSample.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1">
<Window.Resources>
<XmlDataProvider x:Key="xmlProvider" XPath="People" Source="c:\someuri.xml"/>
</Window.Resources>
<Grid>
<ListBox Name="personList" ItemsSource="{Binding Source={StaticResource xmlProvider}, XPath=Person}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding XPath=Name}" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<GroupBox Header="GroupBox" Name="groupBox1" DataContext="{Binding ElementName=personList, Path=SelectedItem}">
<Grid>
<TextBox Name="nameText" Text="{Binding XPath=Name}"/>
<ComboBox Name="genderCombo" Text="{Binding XPath=Gender}">
<ComboBoxItem>Male</ComboBoxItem>
<ComboBoxItem>Female</ComboBoxItem>
</ComboBox>
</Grid>
</GroupBox>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
(为了清楚起见,所有位置/布局元素已被删除)
现在这效果很好!如果我向它提供一些与所提供的路径相匹配的 XML,我会在列表框中得到一个名称列表,单击时会在相应的字段中显示名称和性别。当我开始尝试在 XML 源中使用命名空间时,问题就出现了。然后,XAML 更改为如下所示:
<Window x:Class="DataBindingSample.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1">
<Window.Resources>
<XmlNamespaceMappingCollection x:Key="namespaceMappings">
<XmlNamespaceMapping Uri="http://www.mynamespace.com" Prefix="mns"/>
</XmlNamespaceMappingCollection>
<XmlDataProvider x:Key="xmlProvider" XmlNamespaceManager="{StaticResource namespaceMappings}" XPath="mns:People" Source="c:\someuriwithnamespaces.xml"/>
</Window.Resources>
<Grid>
<ListBox Name="personList" …Run Code Online (Sandbox Code Playgroud) 我不知道如何处理这个:我想要一个TreeView,它将显示来自分层数据结构的一些简单数据.作为一个基本示例(在XML中,使其易于键入):
<Node text="Root">
<Node text="Item 1">
<Node text="Item 1.1" />
</Node>
<Node text="Item 2"/>
</Node>
Run Code Online (Sandbox Code Playgroud)
问题是这理论上可以无限地嵌套,因此您无法静态定义x个级别并完成它.有没有办法定义可以解释这种结构的HierarchicalDataTemplate?
我注意到,即使强制页面重新加载(SHIFT + F5等),大多数浏览器(特别是Chrome)似乎都会缓存Web工作程序脚本.我发现强制缓存更新的唯一可靠方法是将工作脚本的路径键入地址栏并强制单独重新加载.
显然,在尝试开发任何东西时,这都是一种巨大的痛苦.有没有人知道一种可靠的方法来阻止浏览器缓存工作者脚本或强制它以简单的方式重新加载它们?
这比其他任何事情更像是一种健全性检查.我发现在使用Javascript中的闭包时,我经常使用以下模式从函数中访问封闭类:
MyClass.prototype.delayed_foo = function() {
var self = this;
setTimeout(function() {
self.foo(); // Be nice if I could use 'this' here
}, 1000);
};
Run Code Online (Sandbox Code Playgroud)
显然这种方法很好,而且使用起来也不是很麻烦.在我的脑后只有这个小小的痒,说"你让这太复杂了,假的!" 这是普遍接受的模式吗?
如何以编程方式设置指定列表中所选项的DataContext?
更简单地说,如何在代码中重现这种类型的绑定?
<StackPanel>
<ListBox Name="listBox1" />
<TextBox Name="textBox1" DataContext="{Binding ElementName=listBox1, Path=SelectedItem}" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud) 我觉得我缺少一个相当基本的概念,WPF,当涉及到数据绑定,但我似乎无法找到谷歌的关键字的正确组合,以找到我后,所以或许SO社区可以提供帮助.:)
我有一个WPF用户控件需要数据绑定到两个单独的对象才能正确显示.必须从外部源动态设置两个对象.到目前为止,我只是一直在使用的形式动态对象绑定的DataContext属性,但只允许被引用的一个对象.我觉得这是一个简单的问题,我必须遗漏一些明显的东西.
我以前的尝试看起来像这样:
<UserControl.Resources>
<src:Person x:Key="personSource" />
<src:Job x:Key="jobSource" />
</UserControl.Resources>
<TextBox Text="{Binding Source={StaticResource personSource}, Path=Name" />
<TextBox Text="{Binding Source={StaticResource jobSource}, Path=Address" />
Run Code Online (Sandbox Code Playgroud)
这将绑定到任何默认我给班就好了,但如果我尝试动态地设置在代码中的对象(如我在下面)我没有看到任何改变.
Person personSource = FindResource("personSource") as Person;
personSource = externalPerson;
Job jobSource= FindResource("jobSource") as Job;
jobSource = externalJob;
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
如何公开这样的"静态"变量
class MyClass:
X = 1
Y = 2
Run Code Online (Sandbox Code Playgroud)
通过C API?PyTypeObject上看起来像它的唯一变量是tp_members,但我在PyMemberDef中看不到任何标志,表明该成员应该是每个类,而不是每个实例.
为了进一步澄清,因为它可能会改变答案,我试图将C枚举暴露给Python,以便枚举
enum MyFlags {
Alpha = 0,
Beta = 1
};
Run Code Online (Sandbox Code Playgroud)
可以在Python中访问:
module.MyFlags.Alpha
module.MyFlags.Beta
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用包含大量16位浮点数的javascript读取二进制文件.相当肯定它是IEEE标准,小端.将两个字节读入int非常简单,但是从那里我没有太大成功将其扩展为完整的浮点数.有线索吗?
我在javascript中解析我正在解析的二进制文件的AJAX.(Quake 2 BSP,如果有人关心的话.)获取和解析初始文件的代码工作正常,看起来大致如下:
function loadFile(url) {
var request = new XMLHttpRequest();
request.onreadystatechange = function () {
if (request.readyState == 4 && request.status == 200) {
var parsed = parseFile(request.responseText);
}
};
request.open('GET', url, true);
request.overrideMimeType('text/plain; charset=x-user-defined');
request.setRequestHeader('Content-Type', 'text/plain');
request.send(null);
}
Run Code Online (Sandbox Code Playgroud)
正如我所说,这很好,一切都正确加载和解析.但是,该文件还描述了需要检索的几个辅助文件(纹理),因此我添加了一个内部循环,应该加载并解析所有这些文件,如下所示:
function loadFile(url) {
var request = new XMLHttpRequest();
request.onreadystatechange = function () {
if (request.readyState == 4 && request.status == 200) {
var parsed = parseFile(request.responseText);
for(var i = 0; i < parsed.files.length; ++i) {
loadSecondaryFile(parsed.files[i].url); // Request code …Run Code Online (Sandbox Code Playgroud) wpf ×4
c# ×3
data-binding ×3
javascript ×3
ajax ×1
html5 ×1
namespaces ×1
opera ×1
precision ×1
python ×1
python-c-api ×1
web-worker ×1
webgl ×1
xml ×1