私はバインディングで何かを絞っているようですが、多くの試みと調査の後、私はまだ理由を見つけられませんでした (私が見つけたすべての例は私の実装に非常に似ていたので、何が間違っていたのかわかりません)。それを手伝ってくれませんか?
Name というプロパティGlobalConfig
を実装して持つというクラスがあります。INotifyPropertyChanged
public class GlobalConfig : XmlSoftLinkSerializer, INotifyPropertyChanged
{
private string _name;
public string Name
{
get { return _name; }
set
{
if (_name != value && PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("Name"));
_name = value;
}
}
Anは(リストボックスのプロパティを設定することによりObservableCollection<GlobalConfig>
) にバインドされており、ListBox には次の DataTemplate があります。ListBox
DataContext
<DataTemplate>
<TextBlock Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
GlobalConfigUI
また、リストボックスのにバインドされているというユーザー コントロールもありますDataContext
(ElementName を使用)。
ここではすべて正常に動作しますが、構成の名前を変更してもリストボックスは何も変わりません...確認PropertyChanged
したところ、名前セッターのハンドラーが呼び出され、オブジェクトGlobalConfig
も更新されていることがわかりましたが、リストボックスにはまだ古いものが表示されます名前...
GlobalConfigUI
リストボックスの DataContext にバインドする方法は次のとおりです。
<my:GlobalConfigUI x:Name="globalConfigUI1" DataContext="{Binding ElementName=settingsListBox, Path=SelectedValue, Mode=TwoWay}" />
GlobalConfigUI コントロール内の TextBox を Name プロパティにバインドする方法を次に示します。
<TextBox Name="configNameTextBox" Text="{Binding Path=Name, Mode=TwoWay, BindsDirectlyToSource=True}" MinWidth="380" />
私はWPFを完全に初めて使用したわけではありませんが、2、3回しか使用していないので、ここにある種の初歩的な間違いがあるに違いないと思います。ヒントはありますか?