无法将一个SelectedValue绑定到xaml中的WPF组合框

本文关键字:xaml 绑定 中的 WPF 组合 SelectedValue 一个 | 更新日期: 2023-09-27 17:50:16

我不理解绑定原则错误,所以我很好奇:'一个双向或OneWayToSource绑定不能工作在只读属性'CurrentUser'类型'Demo.ViewModel.MainWindowViewModel'。'我的xaml是正确的绑定除了选择一个默认值为组合框,'SelectedValue'。现在这个属性将是好的,如果我手动做一个'SelectedValue = "1"',但不与代码。最终目标是我想从数据库中生成一个人员列表和他们的身份种子,这很好地工作了。但我还想使用Windows登录为用户设置一个自动默认值。这将工作,如果财产将工作,但我猜有更多的我需要知道的约束规则。有点像WPF绑定只适用于特定类型和规则。我可以欺骗它,使'Person'类有defaultuser,然后引用它,但似乎它应该是它自己的属性定义良好,我希望有人在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();
        }

无法将一个SelectedValue绑定到xaml中的WPF组合框

选择的值是一个双向绑定,这意味着绑定的属性是读取来改变选择的值,但是如果选择因为用户使用组合框而改变,属性是设置为该值。

所以有两个解决方案:

  • 单向绑定:SelectedValue="{Binding Path=CurrentUser, Mode=OneWay}"
  • 在只读属性上创建setter,并正确处理用户的值变化。

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

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