0

私が取得しているバインディング原則エラーを理解していないので、興味がありました:「TwoWay または OneWayToSource バインディングは、タイプ「Demo.ViewModel.MainWindowViewModel」の読み取り専用プロパティ「CurrentUser」では機能しません。私のxamlは、コンボボックスの選択されたデフォルト値「SelectedValue」を除いて正しくバインドされています。コードではなく「SelectedValue = "1"」で手動で行うと、この属性は問題ありません。最終的な目標は、データベースから人のリストとその ID シードを生成することであり、これは正常に機能します。しかし、Windows ログインを使用して、ユーザーの自動デフォルトを設定したいと考えています。プロパティが機能する場合、これは機能しますが、バインディング ルールについて知っておく必要があることはもっとあると思います。WPF バインディングと同様に、特定のタイプとルールでのみ機能します。

XAML:

<ComboBox Height="30" Width="170" Margin="10" x:Name="combopersons" 
                    FontSize="20"
                    ItemsSource="{Binding Path=People}"
                    DisplayMemberPath="FirstName"
                    SelectedValuePath="PersonId" 
                    SelectedValue="{Binding Path=CurrentUser}" />

ビューモデル コードの部分的な C# コード ビハインド:

ReadOnlyCollection<Person> _people;
string _curuser;

public string CurrentUser 
        { 
            get
            {
                if (_curuser == null)
                {
                    _curuser = "1";
                }
                return _curuser;
            } 

        }

public ReadOnlyCollection<Person> People 
        {
            get
            {
                if(_people == null)
                {
                    List<Person> persns = this.GetPeople();
                    _people = new ReadOnlyCollection<Person>(persns);
                }
                return _people;
            }
        }

        List<Person> GetPeople()
        {
            ExpensesEntities ee = new ExpensesEntities();
            return ee.tePersons.Select(x => new Person
                                         {
                                             PersonId = x.PersonID,
                                             FirstName = x.FirstName
                                         }).ToList();
        }
4

2 に答える 2

2

選択された値は双方向バインディングです。つまり、バインドされたプロパティが読み取られて選択された値が変更されますが、ユーザーがコンボボックスを使用したために選択が変更された場合、プロパティはその値に設定されます。

したがって、2 つの解決策があります。

  • バインディングを一方向にします。SelectedValue="{Binding Path=CurrentUser, Mode=OneWay}"
  • 読み取り専用プロパティにセッターを作成し、ユーザーの値の変更を適切に処理します。

正しい選択は、アプリケーションによって異なります。

于 2013-01-02T12:10:37.097 に答える
0

CurrentUser プロパティで set メソッドを定義するのを忘れてしまったのではないでしょうか? その他 - あなたのクラスは IPropertyNotify インターフェイスを実装する必要がありますが、それはエラーの原因ではありません。

于 2013-01-02T05:55:14.683 に答える