- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
对不起,我的英语不好,那不是我的母语。
我是 WPF 和 LINQ 的初学者(从 3 天开始),也是 C# 的临时用户。
昨天,我一整天都在尝试解决我的问题并阅读了一些文档,但我的代码中仍然存在一个错误。
我将一个 XElement 传递给绑定(bind)其内容的控件,但我有一个但在 ComboBox 中
这是 XElement 的 XML:
<racine>
<element nom="Element 1">
<rubrique nom="Element 1 - rubrique 1">
<etat valeur="Hors service">
<option valeur="En service" />
<option valeur="Hors service service" />
</etat>
<observation>lorem ipsum</observation>
</rubrique>
<rubrique nom="Element 1 - rubrique 2">
<etat>
</etat>
<observation>titi toto</observation>
</rubrique>
</element>
<element nom="Element 2">
<rubrique nom="Element 2 - rubrique 1">
<etat valeur="foo">
</etat>
<observation>youpi</observation>
</rubrique>
<rubrique nom="Element 2 - rubrique 2">
<etat valeur="bar">
<option valeur="En service" />
</etat>
<observation></observation>
</rubrique>
</element>
</racine>
这是我的控件 MonControle.xaml.cs 背后的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Xml.Linq;
using System.ComponentModel;
using System.Collections.ObjectModel;
using System.Collections.Specialized;
namespace MonProjet.Controles
{
/// <summary>
/// Logique d'interaction pour MonControle.xaml
/// </summary>
public partial class MonControle : UserControl
{
XElement xRacine;
ObservableCollection<XElement> xElementsObservable = new ObservableCollection<XElement>();
public MonControle()
{
InitializeComponent();
DataContext = xElementsObservable;
}
#region Propriété Attribus
[Category("Configuration"), Browsable(false), Description("Element XML racine")]
public XElement xRacine
{
get
{
return xRacine;
}
set
{
this.xRacine = value;
MajXElementsObservable();
}
}
#endregion
private void MajXElementsObservable()
{
var requette = from xElements in xRacine.Descendants("element")
select (XElement)xElements;
xElementsObservable.Clear();
foreach (XElement xElement in requette)
{
xElementsObservable.Add(xElement);
}
}
}
}
这是 MonControle.xaml 的 xaml:
<UserControl x:Class="MonProjet.Controles.MonControle"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="Auto" Width="Auto">
<!--
http://www.youdev.net/post/2008/09/23/WPF-SplitContainer-2.aspx
http://www.youdev.net/post/2009/03/19/WPF-SplitContainer-Part-2.aspx
-->
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="25*"/>
<ColumnDefinition Width="Auto" MinWidth="4"/>
<ColumnDefinition Width="75*"/>
</Grid.ColumnDefinitions>
<DockPanel Grid.Column="0" LastChildFill="True">
<ListBox Name="lbxElements" ItemsSource="{Binding UpdateSourceTrigger=PropertyChanged}" DisplayMemberPath="Attribute[nom].Value" />
</DockPanel>
<GridSplitter Grid.Column="1" ResizeBehavior="PreviousAndNext" Width="4" VerticalAlignment="Stretch"/>
<DockPanel Grid.Column="2" LastChildFill="True" DataContext="{Binding Path=SelectedItem.Elements[rubrique], ElementName=lbxElements, UpdateSourceTrigger=PropertyChanged}">
<ListBox ItemsSource="{Binding UpdateSourceTrigger=PropertyChanged}"
IsSynchronizedWithCurrentItem="True">
<ListBox.ItemTemplate>
<DataTemplate>
<GroupBox Header="{Binding Path=Attribute[nom].Value}">
<StackPanel Orientation="Horizontal">
<!-- http://stackoverflow.com/questions/561166/binding-wpf-combobox-to-a-custom-list -->
<ComboBox MinWidth="75" IsEditable="True"
ItemsSource="{Binding Path=Element[etat].Elements[option], UpdateSourceTrigger=PropertyChanged}"
DisplayMemberPath="Attribute[valeur].Value"
SelectedValuePath="Attribute[valeur].Value"
SelectedValue="{Binding Path=Element[etat].Element[option].Attribute[valeur].Value}"
/>
<TextBox MinWidth="150" AcceptsReturn="False" AcceptsTab="False" TextWrapping="NoWrap"
Text="{Binding Path=Element[observation].Value, UpdateSourceTrigger=PropertyChanged}" />
</StackPanel>
</GroupBox>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</DockPanel>
</Grid>
</UserControl>
我的问题是:
当控件加载时,没问题,但是如果我在元素之间切换左列表框,组合框的值改变......尝试很多事情,做很多事情测试,但不可能修复它!
不可能输入值的人不是在列表中,但我想要能够做到。同样,我做了很多测试了,还是解决不了问题
最后但并非最不重要的一点:我想升职ObservableCollection 时的事件更改为写入 XML 文件,但不可能 catch 一个事件......我试过类似的东西xElementsObservable.CollectionChanged+= new NotifyCollectionChangedEventHandler(XElementsObservable_CollectionChanged);但它不起作用...
预先感谢您的帮助!
最佳答案
这很难,但我有解决我所有问题的方法!
这里是解决方案:
在第一时间,ComboBox XAML 必须如下所示:
<ComboBox MinWidth="75" IsEditable="True"
IsSynchronizedWithCurrentItem="False"
ItemsSource="{Binding Path=Element[etat].Elements[option]}"
DisplayMemberPath="Attribute[valeur].Value"
Text="{Binding Element[etat].Attribute[valeur].Value, UpdateSourceTrigger=PropertyChanged}"
/>
这个回答问题 1 和 2:当我们关注包含 的节点的属性“valeur”的值时,我们可以写我们想要的,即使我们写的值不在集合中,并且, ComboBox文本中节点显示的问题没有了!
对于问题 3,我的错误是我专注于可观察集合!
但是,解决方案很简单,我在包含我在此处操作的所有 XElements 的 XDocument 上附加了一个“已更改”事件!
所以,我将这段代码放在我的软件的主窗口中:
private void InitPerso()
{
xDoc = XDocument.Load(@"C:\fichier.xml");
xDoc .Changed += new EventHandler<XObjectChangeEventArgs>(XDoc_Changed);
}
private void XEdls_Changed(object sender, XObjectChangeEventArgs e)
{
xDoc .Save(@"C:\fichier.xml");
}
瞧瞧!
请原谅我的英语不好,希望这对您有所帮助...
关于wpf - 使用 LINQ XML 绑定(bind)组合框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2343164/
我不知道该怎么做... function f1() { var x = 10; function f2(fx) { var x; x = 6;
早期绑定(bind)和后期绑定(bind)有什么区别? 最佳答案 简短的回答是,早期(或静态)绑定(bind)是指编译时绑定(bind),后期(或动态)绑定(bind)是指运行时绑定(bind)(例如
如何在 SwiftUI View 上使用 Binding(get: { }, set: { }) 自定义绑定(bind)与 @Binding 属性。我已成功使用此自定义绑定(bind)与 @State
我经常发现自己遇到问题,即控件的两个(相关)值被更新,并且两者都会触发昂贵的操作,或者控件可能会暂时处于不一致的状态。 例如,考虑一个数据绑定(bind),其中两个值 (x,y) 相互减去,最终结果用
我想通过我的 ViewModel 控制我的一个窗口的高度和宽度。 这看起来很简单。 但没有。它不起作用。 它检查 ViewModel 的 Width但不是 Height . 奇怪的是,如果我切换 W
UI5中一次性绑定(bind)和单向绑定(bind)有什么区别? 是否有任何用户特定的用例我会使用它们? 我无法从文档中获得太多信息。 最佳答案 单程 它的作用:单向数据流。模型数据的变化(例如通过
(define make (lambda (x) (lambda (y) (cons x (list y))))) (let ((x 7) (p (make 4))) (cons
尽管我或多或少地了解什么是语言绑定(bind),但我很难理解它们是如何工作的。 例如,谁能解释一下如何为 WinAPI 制作 Java 绑定(bind)? 最佳答案 如果您搜索 Foreign Fun
谁能解释为什么我可以重新绑定(bind)列表但不能+? (binding [list vector] (list 1 3)) (binding [list +] (list 1 3)) (bi
我真的很喜欢 Caliburn 和命名约定绑定(bind),我很惊讶 可见性与“CanNAME”约定用于保护 Action 的方式不同。 据我所知, BooleanToVisibilityConver
我了解动态绑定(bind)的实现方式以及静态绑定(bind)和动态绑定(bind)之间的区别,但我只是无法理解动态绑定(bind)的定义。基本上它是一种运行时绑定(bind)类型。 最佳答案 基本上,
http://jsfiddle.net/3NRsd/ var foo = $("div").bind("click", function() { $("div").animate({"hei
这个问题我快疯了...我有一个用户控件,它有一个用于插入操作的 FormView 和一个用于所有其他操作的 GridView。 在这两个控件中,我都有一个 DropDownList,如下所示: '
我有一个绑定(bind)到 ListBox 的地址的 ObservableCollection。然后在 ItemTemplate 中,我使用 {Binding .} 绑定(bind)到当前地址记录。这
如果我有以下简单的 js/knockout 代码: .js( View 模型): var image = ko.observable('http://placehold.it/300x150'); 看
我正在 aurelia 上开发一个自定义属性,让用户在输入文本区域时从列表中进行选择。例如,用法将是这样的: 正如您可能注意到的,auto-complete是属性。现在,当我想显示提示时,我想在自定
我正在使用 EventEmitter2作为我的应用程序内部的消息总线。现在我需要绑定(bind)和取消绑定(bind)一些事件处理程序。因为我也希望他们bind将它们添加到给定的上下文中,我最终得到以
我有以下函数调用: $(".selector").on("click", callback.bind(this, param1, param2)); 在我的回调函数中,我想使用绑定(bind)的 th
我目前正在试验新的编译绑定(bind),并且(再次)达到了我在拼图中遗漏了一个小问题:为什么我必须调用 Bindings.Update?直到现在,我还认为实现 INotifyPropertyChang
我正在阅读一本关于编写 JavaScript 框架的书,并找到了这段代码。但是我不明白它是如何工作的,尤其是 bind.bind 的用法?有人知道吗? var bind = Function.prot
我是一名优秀的程序员,十分优秀!