我试图弄清楚为什么我不能在我的ComboBox上设置初始值SelectedItem
,如果我绑定ItemsSource="{x:Bind [source]}"
。
这个xaml可以工作
<ComboBox
ItemsSource="{Binding Sites, Mode=OneWay}"
SelectedItem="{x:Bind ViewModel.SelectedContractSite, Mode=TwoWay}"/>
字符串
但是当我更改为下面的xaml时,ComboBox包含了站点,但没有将SelectedItem显示为默认值(实际上,它似乎 Flink 到视图中,然后消失)。
<ComboBox
ItemsSource="{x:Bind ViewModel.Sites, Mode=OneWay}"
SelectedItem="{x:Bind ViewModel.SelectedContractSite, Mode=TwoWay}"/>
型
下面是ViewModel中的相关代码(我缩短了长的Sites列表)。
public List<string> Sites
{
get
{
return new List<string>()
{
"Miami",
"Texas"
};
}
}
private string _selectedContractSite = "Texas";
public string SelectedContractSite
{
get
{
return _selectedContractSite;
}
set
{
Set(ref _selectedContractSite, value);
}
}
型
2条答案
按热度按时间4sup72z81#
问题似乎与您未显示的代码有关。
如果我像这样创建一个viewModel
字符串
然后像这样设置代码隐藏:
型
然后,下面的XAML按预期工作
型
注意:我使用
x:Bind
并在两个绑定路径中引用ViewModel。我怀疑你的困惑在于
x:Bind
和Binding
之间的差异。对于
x:Bind
,绑定路径的根是具有绑定的控件所在的页面。对于
Binding
,绑定路径的根是控件所在页面的DataContext
。如果你确实需要使用两者的组合,那么在页面构造函数中设置
this.DataContext = this;
,使它们都指向同一个对象。nfg76nw02#
为什么要在
Sites
属性的getter中创建一个新的List<string>
?尝试只创建源集合 * 一次 *:
字符串