ComboBox DataContex没有更新属性放在ContentControl(UWP)中?

时间:2017-09-07 17:30:57

标签: c# combobox uwp uwp-xaml

我在ComboBox的{​​{1}}使用了ContentTemplate。最初,我将ContentControlDataContext)与内容属性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>

1 个答案:

答案 0 :(得分:0)

  

之后,在运行时将ContentControl的DataContext更改为Profession2。

绑定路径从atexit更新为Profession1Profession2的{​​{1}}已更新。但是,由于您将ItemsSourceComboBox定义为相同的值,因此看起来绑定源不会更新。请将它们设置为不同的值以检查结果。例如,更新您的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。如果您详细说明了此功能所使用的方案,我们可能会为此提供更好的实践。例如,要避免更新绑定路径以满足要求,但要通过其他方式。