如果我使用 ItemsSource="{x:Bind [source]}"
.
这个 xaml 有效
<ComboBox
ItemsSource="{Binding Sites, Mode=OneWay}"
SelectedItem="{x:Bind ViewModel.SelectedContractSite, Mode=TwoWay}"/>
但是当我更改为以下 xaml 时,ComboBox 包含站点,但不显示 SelectedItem 作为默认值。 (事实上,它似乎闪烁到视野中然后消失)。
<ComboBox
ItemsSource="{x:Bind ViewModel.Sites, Mode=OneWay}"
SelectedItem="{x:Bind ViewModel.SelectedContractSite, Mode=TwoWay}"/>
这里是ViewModel中的相关代码。 (我缩写了长站点列表。)
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);
}
}
感谢您的帮助!
最佳答案
问题似乎与您未显示的代码有关。 (为了将来的引用,请参阅 https://stackoverflow.com/help/mcve 以消除在回答 future 问题时的猜测。)
如果我像这样创建一个 viewModel
public class ViewModel : INotifyPropertyChanged
{
public List<string> Sites
{
get
{
return new List<string>()
{
"Miami",
"Texas"
};
}
}
private string _selectedContractSite = "Texas";
public string SelectedContractSite
{
get
{
return _selectedContractSite;
}
set
{
if (_selectedContractSite != value)
{
_selectedContractSite = value;
OnPropertyChanged(nameof(SelectedContractSite));
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
然后像这样设置代码隐藏:
public MainPage()
{
this.InitializeComponent();
this.ViewModel = new ViewModel();
}
public ViewModel ViewModel { get; set; }
然后下面的 XAML 按预期工作
<ComboBox ItemsSource="{x:Bind ViewModel.Sites, Mode=OneWay}"
SelectedItem="{x:Bind ViewModel.SelectedContractSite, Mode=TwoWay}" />
注意。我正在使用 x:Bind
并在两个绑定(bind)路径中引用 ViewModel。
我怀疑您的困惑在于 x:Bind
和 Binding
之间的区别。
对于 x:Bind
,绑定(bind)路径的根是带有绑定(bind)的控件所在的页面。
对于 Binding
,绑定(bind)路径的根是控件所在页面的 DataContext
。
将两者混合在一起会让人感到困惑。如果您确实需要使用两者的组合,请在页面构造函数中设置 this.DataContext = this;
,以便它们都指向同一事物。
关于c# - ComboBox SelectedItem 未设置 x :Bind,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42815156/