C# WPF-Can';t设置项目资源更改时选择的索引组合框

C# WPF-Can';t设置项目资源更改时选择的索引组合框,c#,wpf,combobox,itemssource,selectedindex,C#,Wpf,Combobox,Itemssource,Selectedindex,我有一个显示项目列表的组合框。显示的项目列表由一组单选按钮确定。我附加到单选按钮clicked events并尝试在组合框上设置新的itemssource。我希望selectedItem默认为0,而不是-1 我做错了什么 公共部分类主窗口:窗口 { List list1=新列表(){“列表1”、“列表1”、“列表1”}; List list2=新列表(){“列表2”、“列表2”、“列表2”}; ComboBoxViewModel viewModel=新ComboBoxViewModel();

我有一个显示项目列表的组合框。显示的项目列表由一组单选按钮确定。我附加到单选按钮clicked events并尝试在组合框上设置新的itemssource。我希望selectedItem默认为0,而不是-1

我做错了什么


公共部分类主窗口:窗口
{
List list1=新列表(){“列表1”、“列表1”、“列表1”};
List list2=新列表(){“列表2”、“列表2”、“列表2”};
ComboBoxViewModel viewModel=新ComboBoxViewModel();
公共主窗口()
{
初始化组件();
this.DataContext=viewModel;
cb_Test.ItemsSource=list1;
}
专用void radioButton1_单击(对象发送者,路由目标e)
{
cb_Test.ItemsSource=list1;
viewModel.SelectedIndex=0;
}
专用void radioButton2\u单击(对象发送者,路由目标e)
{
cb_Test.ItemsSource=list2;
viewModel.SelectedIndex=0;
}
}
公共类ComboBoxViewModel:INotifyPropertyChanged
{
私有int-selectedIndex;
公共事件属性更改事件处理程序属性更改;
公共整数选择索引
{
获取{return selectedIndex;}
设置
{
if(selectedIndex!=值)
{
selectedIndex=值;
NotifyPropertyChanged(“SelectedIndex”);
}
}
}
私有void NotifyPropertyChanged(字符串控制名)
{
if(PropertyChanged!=null)
{
PropertyChanged(这是新的PropertyChangedEventArgs(controlName));
}
}
}

您的XAML中没有任何数据绑定到
ComboBoxViewModel
视图模型,至少提供了一个。我认为这就是问题所在。

您需要将组合框绑定到VM

public partial class MainWindow : Window
{
    List<string> list1 = new List<string>() { "list 1", "list 1", "list 1" };
    List<string> list2 = new List<string>() { "list 2", "list 2", "list 2" };
    ComboBoxViewModel viewModel = new ComboBoxViewModel();

    public MainWindow()
    {
        InitializeComponent();
        cb_Test.DataContext = viewModel;
    }

    private void radioButton1_Click(object sender, RoutedEventArgs e)
    {
        viewModel.ItemsSource = list1;
        viewModel.SelectedIndex = 0;
    }

    private void radioButton2_Click(object sender, RoutedEventArgs e)
    {
        viewModel.ItemsSource = list2;
        viewModel.SelectedIndex = 0;
    }
}
公共部分类主窗口:窗口
{
List list1=新列表(){“列表1”、“列表1”、“列表1”};
List list2=新列表(){“列表2”、“列表2”、“列表2”};
ComboBoxViewModel viewModel=新ComboBoxViewModel();
公共主窗口()
{
初始化组件();
cb_Test.DataContext=viewModel;
}
专用void radioButton1_单击(对象发送者,路由目标e)
{
viewModel.ItemsSource=list1;
viewModel.SelectedIndex=0;
}
专用void radioButton2\u单击(对象发送者,路由目标e)
{
viewModel.ItemsSource=list2;
viewModel.SelectedIndex=0;
}
}
在XAML中

<Grid>
    <ComboBox Name="cb_Test"
              ItemsSource="{Binding ItemsSourse}"
              SelectedIndex="{Binding SelectedIndex}"/>
    <RadioButton Content="List 1" Name="radioButton1" Click="radioButton1_Click" />
    <RadioButton Content="List 2" Name="radioButton2" Click="radioButton2_Click" />
</Grid>


更好的设计是移动代码
viewModel.ItemsSource=list1;viewModel.SelectedIndex=0到虚拟机本身。

同意Tigran。您需要将ComboBoxViewModel指定为窗口/页面/控件的DataContext,无论这是什么,您都需要在xaml中的ComboBox声明中绑定SelectedIndex。由于需要绑定,您还应该使用SelectedIndex将列表集合移动到一个ViewModel,并将ComboBox项Source绑定到ViewModel中的一个属性,您可以在特定条件下设置该属性。

您的ViewModel似乎没有绑定到ComboBox,对吗?啊,真不敢相信我错过了。谢谢