1

我有一个模型

private XmlDataProvider _xmlProvider;
public XmlDataProvider XmlProvider
{
        get { return _xmlProvider; }
        set { _xmlProvider = value; OnPropertyChanged("XmlProvider"); }
}

在模型构造函数中,我读取了一个 xml 文件

var doc = new System.Xml.XmlDocument();
doc.Load("books.xml");

 XmlProvider = new XmlDataProvider()
 {
   Document = doc,
   XPath = @"/root"
 };

xml 文件只有一个根和 1 个元素

<proba author="probaauthor"/>

在视图模型中,我参考了模型

private Model _model;
public Model Model
{
        get { return _model; }
        set
        {
            _model = value;
            OnPropertyChanged("Model");
        }
}

在视图中:

xmlns:localMvvmxml="clr-namespace:MvvmSamples.Mvvm.SimpleXml"

<Grid.Resources>
        <localMvvmxml:ViewModel x:Key="MyXmlProvider"/>

在下面我有一个带有文本框的堆栈面板

<StackPanel Orientation="Horizontal" DataContext="{StaticResource MyXmlProvider}" Margin="5">
            <TextBox  Text="{Binding XPath=/root/proba/@author}" Width="113"></TextBox>

当然它不起作用,因为我无法联系到提供商。那么在TextBox Binding中写什么呢?

谢谢。查理

4

1 回答 1

1

我猜你的视图可能没有绑定到你的视图模型。我猜您在执行 {Binding XPath=(location)} 时不知道您的视图正在使用 Viewmodel 进行绑定。

这可能有助于记住您的代码的命名空间声明可能会有所不同。

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
                    xmlns:vm="clr-namespace:MvvmSamples.Mvvm.ViewModels" 
                    xmlns:vw="clr-namespace:MvvmSamples.Mvvm.View">

<DataTemplate DataType="{x:Type vm:SimpleXMLViewModel}">
        <vw:SimpleXML />
    </DataTemplate>

还要记住一个很好的 MVVM 示例:http: //msdn.microsoft.com/en-us/magazine/dd419663.aspx

于 2013-01-17T21:47:31.870 回答