0

私はバインディングで何かを絞っているようですが、多くの試みと調査の後、私はまだ理由を見つけられませんでした (私が見つけたすべての例は私の実装に非常に似ていたので、何が間違っていたのかわかりません)。それを手伝ってくれませんか?

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 があります。ListBoxDataContext

<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回しか使用していないので、ここにある種の初歩的な間違いがあるに違いないと思います。ヒントはありますか?

4

1 に答える 1

1

最初の発言として、TextBox追加してバインドを変更しますUpdateSourceTrigger=PropertyChanged。またBindsDirectlyToSource、使用頻度は少ないです。削除して再確認

また、実装を次のように変更します

private string _name;
public string Name 
{ 
    get { return _name; } 
    set 
    {
        _name = value;
        if (_name != value && PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs("Name"));

    } 
}
于 2013-01-24T17:47:14.623 に答える