WPF组合框SelectedIndex属性绑定不工作
我正在尝试将combobox的SelectedIndex属性绑定到我的ViewModel。这是代码 Xaml:WPF组合框SelectedIndex属性绑定不工作,wpf,wpf-4.0,Wpf,Wpf 4.0,我正在尝试将combobox的SelectedIndex属性绑定到我的ViewModel。这是代码 Xaml: <ComboBox x:Name="BloodGroupFilter" SelectedIndex="{Binding Path=SelectedBloodGroupIndex, Mode=TwoWay}"> <ComboBox.ItemsSource> <CompositeCollection> &l
<ComboBox x:Name="BloodGroupFilter" SelectedIndex="{Binding Path=SelectedBloodGroupIndex, Mode=TwoWay}">
<ComboBox.ItemsSource>
<CompositeCollection>
<ComboBoxItem Foreground="red" FontStyle="Italic">No Filter</ComboBoxItem>
<CollectionContainer Collection="{Binding Source={StaticResource BloodGroupEnum}}"/>
</CompositeCollection>
</ComboBox.ItemsSource>
</ComboBox>
如您所见,我正在尝试将组合框的SelectedIndex设置为“4”。这不会发生,SelectedIndex设置为0。此外,当用户选择combobox的特定项时,我希望ViewModel的SelectedBloodGroupIndex属性将自身更新为combobox的当前选定项,但这种情况也不会发生。从未调用ViewModel属性(set和get)。上述代码绑定失败的任何原因
更新
<UserControl.Resources>
<ObjectDataProvider x:Key="BloodGroupEnum" MethodName="GetValues" ObjectType="{x:Type sys:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="enums:BloodGroup" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</UserControl.Resources>
您需要通知ViewModel的SelectedBloodGroupIndex的setter中更改的属性。我希望你对房地产交易有想法
<Window x:Class="WpfApplication4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:myWindow="clr-namespace:WpfApplication4"
Title="MainWindow" Height="800" Width="800" WindowStartupLocation="CenterScreen">
<Grid>
<ComboBox SelectedIndex="{Binding SelectedIndex}">
<ComboBoxItem Content="1"/>
<ComboBoxItem Content="2"/>
<ComboBoxItem Content="3"/>
<ComboBoxItem Content="4"/>
<ComboBoxItem Content="5"/>
</ComboBox>
</Grid>
如何以及在何处实例化ViewModel?您在哪里将其绑定到视图?我怀疑您没有正确设置
DataContext
。输出窗口是否显示绑定错误?ViewModel由Caliburn Micro引导程序创建。视图也是由Caliburn创建的。我在视图中有一些绑定到ViewModel的控件,这些绑定工作正常。这表明视图已正确绑定到ViewModel。唯一不起作用的是设置组合框的SelectedIndex,如我的问题中所述。您还可以告诉我们静态数据是什么样子吗?我已经更新了问题,以包括StaticResource键定义。我认为PropertyChanged与当前场景无关。尽管如此,我还是在SelectedBloodGroupIndex的setter中添加了代码,但它没有任何用处。问题是在安装过程中任何时候都没有调用Setter/Getter。我已经用示例更新了解决方案。如果它不是这样工作的,那么问题在于绑定。这是一个很好的捕获,但是当您仅从ViewModel更新视图时,INotifyPropertyChanged
非常有用。OP在从视图更新ViewModel时遇到问题,而且getter和setter甚至没有被调用。
<Window x:Class="WpfApplication4.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:myWindow="clr-namespace:WpfApplication4"
Title="MainWindow" Height="800" Width="800" WindowStartupLocation="CenterScreen">
<Grid>
<ComboBox SelectedIndex="{Binding SelectedIndex}">
<ComboBoxItem Content="1"/>
<ComboBoxItem Content="2"/>
<ComboBoxItem Content="3"/>
<ComboBoxItem Content="4"/>
<ComboBoxItem Content="5"/>
</ComboBox>
</Grid>
public partial class MainWindow :Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new MyViewModel();
}
}
public class MyViewModel :INotifyPropertyChanged
{
public MyViewModel()
{
SelectedIndex = 2;
}
private int _selectedIndex;
public int SelectedIndex
{
get
{
return _selectedIndex;
}
set
{
_selectedIndex = value;
Notify("SelectedIndex");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void Notify(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}