设置组合框视图模型所选索引默认值



我正在尝试将ComboBox绑定到ViewModel,并将其默认SelectedIndex设置为0或第一项。

当我在ViewModel中设置默认SelectedIndex时,它不起作用。

尽管它与CCD_ 4一起工作。


XAML

<ComboBox x:Name="cboExample"
ItemsSource="{Binding Example_Items}"
SelectedIndex="{Binding Example_SelectedIndex}"
SelectedItem="{Binding Example_SelectedItem}"
HorizontalAlignment="Left" 
Margin="0,0,0,0" 
VerticalAlignment="Top" 
Width="105" 
Height="22"/>

视图模型

注意:我只设置了一个或另一个。

public ViewModel()
{
// ComboBox Defaults
Example_SelectedIndex = 0; // does not work
Example_SelectedItem = "item 1"; //works
}

项目来源

public List<string> _Example_Items = new List<string>()
{
"item 1",
"item 2",
"item 3"
};
public List<string> Example_Items
{
get { return _Example_Items; }
set
{
_Example_Items = value;
OnPropertyChanged("Example_Items");
}
}

所选索引

不工作

public int _Example_SelectedIndex { get; set; }
public int Example_SelectedIndex
{
get { return _Example_SelectedIndex; }
set
{
if (_Example_SelectedIndex == value)
{
return;
}
_Example_SelectedIndex = value;
OnPropertyChanged("Example_SelectedIndex");
}
}

所选项目

Works

public string _Example_SelectedItem { get; set; }
public string Example_SelectedItem
{
get { return _Example_SelectedItem; }
set
{
if (_Example_SelectedItem == value)
{
return;
}
_Example_SelectedItem = value;
OnPropertyChanged("Example_SelectedItem");
}
}

您可以在数据加载完成时设置Example_SelectedIndex,即Example_Items。

private _Example_Items;
public List<string> Example_Items
{
get 
{ 
if(_Example_Items == null)
{
loadExampleItems();
}
return _Example_Items; 
}
set
{
_Example_Items = value;
OnPropertyChanged("Example_Items");
}
}

//在这种情况下,如果您从服务器获取数据,这将是异步响应方法。

private void loadExampleItems()
{
var examples = new List<string>()
{
"item 1",
"item 2",
"item 3"
};
Example_Items = examples;
Example_SelectedIndex = Example_Items.FirstOrDefault();
}

不要同时绑定到SelectedItemSelectedIndex。这是一个或另一个。这对我来说很好:

public class ViewModel
{
public ViewModel()
{
Example_SelectedIndex = 0; //unnecessary since the default value of an int is 0
}
private List<string> _Example_Items = new List<string>()
{
"item 1",
"item 2",
"item 3"
};
public List<string> Example_Items
{
get { return _Example_Items; }
set { _Example_Items = value; }
}
private int _Example_SelectedIndex;
public int Example_SelectedIndex
{
get { return _Example_SelectedIndex; }
set
{
if (_Example_SelectedIndex == value)
return;
_Example_SelectedIndex = value;
}
}
}

XAML:

<ComboBox x:Name="cboExample"
ItemsSource="{Binding Example_Items}"
SelectedIndex="{Binding Example_SelectedIndex}"
HorizontalAlignment="Left" 
Margin="0,0,0,0" 
VerticalAlignment="Top" 
Width="105" 
Height="22"/>

顺便说一下,_Example_SelectedIndex应该是一个私有字段,而不是公共属性。_Example_Items也应该是私有的。

最新更新