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

あなたの View はおそらく Viewmodel にバインドされていないと思います。{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 に答える