无法将一个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="{Binding Path=CurrentUser, Mode=OneWay}"
- 在只读属性上创建setter,并正确处理用户的值变化。
正确的选择取决于你的应用。
也许你忘了在CurrentUser属性中定义set方法?其他事情-你的类应该实现IPropertyNotify接口,但它不是导致错误的原因。