私のViewModelには2つのパブリックプロパティFoo
とBar
があります。 Foo
は単なる文字列であり、Bar
はパブリックプロパティName
が文字列であるクラスです。DataBindingでのプロパティのプロパティへのアクセス
GUIエレメントにBar.Name
をバインドしたいと思います。 どうすればいいですか?
<Label Content="{Binding Foo}">
文字列Foo
を期待どおりにラベルに書き込みます。
しかし、<Label Content="{Binding Bar.Name}">
は、ラベルにBar
という名前を書きません。代わりに、ラベルは空のままです。
編集: 私のXAMLのDataContext
(したがってラベルの)はViewModelに設定されています。
EDIT2:もちろん、実際のコードは上記のように単純ではありません。私は上記の説明を表し、最小限の作業例を建て:
XAML:
<Window x:Class="MyTestNamespace.MyXAML"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006">
<StackPanel>
<Label Content="{Binding Foo}"></Label>
<Label Content="{Binding Bar.Name}"></Label> <!-- Works fine! -->
</StackPanel>
</Window>
のViewModel:
namespace MyTestNamespace
{
class MyVM
{
public string Foo { get; set; }
public MyBar Bar { get; set; }
public MyVM()
{
Foo = "I am Foo.";
Bar = new MyBar("I am Bar's name.");
}
}
class MyBar
{
public string Name { get; set; }
public MyBar(string text)
{
Name = text;
}
}
}
予想通りこれは、実際に作業を行います。私は実際のコードをあなたと共有することができません(あまりにも多く、会社によって所有されています)ので、私は自分で原因を探す必要があります。考えられる理由に関するヒントは大歓迎です!
はあなたのviewmodelでバークラスのインスタンスの名前プロパティが満たされている(とバープロパティが正しくインスタンス化されていることを確認しています)?ラベル(または親やDataTemplateのいずれか)にDataContextがどのように設定されていますか? –
はい、すべて正しく設定されています。私はコード内の 'Bar.Name'で正常に動作することができます。 'Bar'と' Bar.Name'のどちらもnullではありません。 – Kjara
より多くの洞察のためにコードを共有してください –