完全相同的代码可以很好地处理字符串集合,但对于整型却会失败。
我的代码(删除了不必要的部分以使事情变得清晰):
XAML:
<ComboBox Name="Id"
Grid.Row="5"
SelectedItem="{Binding Id}"
ItemsSource="{Binding Ids}"
Style="{StaticResource MaterialDesignComboBox}"
IsEnabled="True"
IsEditable="False"
IsReadOnly="True"/>ViewModel:
class ViewModel : BaseViewModel, INotifyPropertyChanged
{
public ObservableCollection<int> Ids { get; set; }
new public event PropertyChangedEventHandler PropertyChanged;
} public class BaseViewModel : INotifyPropertyChanged
{
public int Id { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
}(代码和名称已调整,以表示问题,但忽略了不必要的信息)
列表已填充,我可以选择其中一个选项,但选择的选项为空。用户无法辨别已选择的内容。有什么建议这里出了什么问题?
编辑
将每个整数解析为字符串(并将集合更改为字符串)可以解决此问题。我不知道,看起来ComboBox不喜欢整数。
发布于 2020-05-19 19:59:39
我认为这里的问题是,您的ComboBox具有名称"Id“,并且您希望绑定到具有相同名称的属性。如果您不使用ComboBox的名称,我建议您将其删除。否则,您可以将其重命名。
编辑:当然你的视图模型必须包含"Id"-property:
public class ViewModel : INotifyPropertyChanged
{
public ObservableCollection<int> Ids { get; set; }
public int Id { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
}发布于 2020-05-20 01:14:16
即使您删除了一些其他代码,您也可以使用类型为int的ID属性在相同的命名空间‘ObservableCollection ViewModel’中创建一个新类,并将该类用作您的类的类型。然后在ComboBox中,将SelectedValuePath设置为ID,并将SelectedValue绑定回BaseViewModel类中的Id属性。
最后,您应该能够删除“ViewModel类”中对INotifyPropertyChanged的引用,因为当使用BaseViewModel作为基类时,应该会自动继承这个引用。
就像这样..。
C#
public class ViewModel : BaseViewModel
{
public ObservableCollection<ComboBoxIDClass> Ids { get; set; }
}
public class ComboBoxIDClass : INotifyPropertyChanged
{
public int ID { get; set; }
public event PropertyChangedEventHandler PropertyChanged;
}XAML
<ComboBox Name="Id" Grid.Row="5" ItemsSource="{Binding Ids}" SelectedValuePath="ID" SelectedValue="{Binding Id}" Style="{StaticResource MaterialDesignComboBox}" IsEnabled="True" IsEditable="False" IsReadOnly="True"/>发布于 2020-05-20 02:40:19
尝试将绑定模式更改为TwoWay:
<ComboBox Name="Id"
Grid.Row="5"
SelectedItem="{Binding Id, Mode=TwoWay}"
ItemsSource="{Binding Ids}"
Style="{StaticResource MaterialDesignComboBox}"
IsEnabled="True"
IsEditable="False"
IsReadOnly="True"/>https://stackoverflow.com/questions/61890182
复制相似问题