我在ComboBox
的{{1}}使用了ContentTemplate
。最初,我将ContentControl
(DataContext
)与内容属性Profession1
绑定在代码后面。
然后我在运行时更改ContentControl
的值。之后,在运行时将ComboBox
DataContext
更改为ContentControl
。在这种情况下,Profession2
ComboBox
不会更改,DataContext
的{{1}}值也会设置为null。
我认为这是MSControl中的一个问题。请建议您解决此问题。
请参阅以下代码:
查看:
DataContext
模特&视图模型:
SelectedItem
代码背后:
<Page.Resources>
<local:MainPageViewModel x:Key="datacontent"></local:MainPageViewModel>
</Page.Resources>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"
Margin="10">
<ContentControl x:Name="contentControl" >
<ContentControl.ContentTemplate>
<DataTemplate>
<ComboBox x:Name="comboBox"
ItemsSource="{Binding Professions}"
SelectedItem="{Binding Profession, Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"
HorizontalAlignment="Stretch"></ComboBox>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
<Button Click="Button_Click_2" Content="Change DataContext" Width="100" Height="50"></Button>
</Grid>
</Page>
答案 0 :(得分:0)
之后,在运行时将ContentControl的DataContext更改为Profession2。
绑定路径从atexit
更新为Profession1
。 Profession2
的{{1}}已更新。但是,由于您将ItemsSource
和ComboBox
定义为相同的值,因此看起来绑定源不会更新。请将它们设置为不同的值以检查结果。例如,更新您的Profession1
,如下所示:
Profession2
在这种情况下,ComboBox DataContext不会更改,也会将之前的SelectedItem值DataContext设置为null。
由于MainViewModel
的{{1}}已通过重新绑定进行更新,因此public class MainPageViewModel
{
List<string> Profession1list=new List<string>() { "Lawyer", "Politician", "Other" };
List<string> Profession2list = new List<string>() { "Lawyer2", "Politician2", "Other2" };
public MainPageViewModel()
{
Profession1 = new Person(Profession1list);
Profession2 = new Person(Profession2list);
}
private Person profession1;
public Person Profession1
{
get { return profession1; }
set { this.profession1 = value; }
}
private Person profession2;
public Person Profession2
{
get { return profession2; }
set { this.profession2 = value; }
}
...
}
public class Person : INotifyPropertyChanged
{
public Person(List<string> Professionlist)
{
_professions = new List<string>();
foreach(string item in Professionlist)
{
_professions.Add(item);
}
//_professions.Add("Lawyer");
//_professions.Add("Politician");
//_professions.Add("Other");
}
private List<string> _professions;
public List<string> Professions
{
get
{
return _professions;
}
}
...
}
已清除。
我的测试环境是OS build 15063.更多详情请参考Data binding overview。如果您详细说明了此功能所使用的方案,我们可能会为此提供更好的实践。例如,要避免更新绑定路径以满足要求,但要通过其他方式。