0

我不理解我遇到的绑定原则错误,所以我很好奇:“TwoWay 或 OneWayToSource 绑定无法对“Demo.ViewModel.MainWindowViewModel”类型的只读属性“CurrentUser”起作用。我的 xaml 绑定正确,除了为组合框选择了默认值“SelectedValue”。现在,如果我使用 'SelectedValue = "1"' 而不是使用代码手动执行此属性,则该属性会很好。最终目标是我想从数据库中生成人员列表及其身份种子,这很好用。但我也想使用 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}" />

viewmodel 代码的部分 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

所选值是双向绑定,这意味着读取绑定的属性以更改所选值,但如果由于用户使用组合框而更改了选择,则将属性设置为该值。

所以有两种解决方案:

  • 以一种方式进行绑定:SelectedValue="{Binding Path=CurrentUser, Mode=OneWay}"
  • 在只读属性上创建一个setter,并妥善处理用户的值变化。

正确的选择取决于您的应用。

于 2013-01-02T12:10:37.097 回答
0

也许您忘记了在 CurrentUser 属性中定义 set 方法?其他的 - 你的类应该实现 IPropertyNotify 接口,但这不是错误的原因。

于 2013-01-02T05:55:14.683 回答