有没有办法在 MahApps.Metro Flyout 中设置 ComboBox 的 SelectedIndex?

Is there a way to set SelectedIndex of a ComboBox inside a MahApps.Metro Flyout?

我有一个 UserControl 包含在 MahApps.Metro.Controls.Flyout 中。在那个 UserControl 里面,有一个 ComboBox。我试图将默认值 SelectedIndex 设置为 0。这样当弹出窗口打开时,第一个项目(“源 A”)被选中。

目前,无论何时打开弹出窗口,SelectedIndex 都会设置为 -1,并且未选择任何内容。

包含浮出控件的视图:

<mah:FlyoutsControl>
    <mah:Flyout IsOpen="{Binding MyViewIsOpen, Mode=TwoWay, 
    UpdateSourceTrigger=PropertyChanged}"
    x:Name="DataSourceFlyout">
        <Grid>
            <local:DataSourceView/>
        </Grid>
    </mah:Flyout>
</mah:FlyoutsControl>

DataSourceView:

<UserControl ...>
    <ComboBox SelectedIndex="0" 
      SelectedValue="{Binding SelectedDataSource, Mode=TwoWay, 
      UpdateSourceTrigger=PropertyChanged}"
      SynchronizedWithCurrentItem="True">
        <ComboBoxItem Tag="SourceA" Content="Source A"/>
        <ComboBoxItem Tag="SourceB" Content="Source B"/>
        <ComboBoxItem Tag="SourceC" Content="Source C"/>
    </ComboBox>
</UserControl>

ViewModel:

public string SelectedDataSource { get; set; }

注意:这似乎是因为我的UserControlFlyout内。当在 Flyout 之外使用时,相同的 XAML 工作正常。我还需要做些什么才能在 ComboBox 中选择第一项吗?

视图模型中的源 属性 决定了要选择的值。

不清楚您的示例中 SelectedDataSource 属性 的值是什么,但您应该将其设置为“SourceA”、“SourceB”或“SourceC”,然后设置 SelectedValuePath 属性 到“标签”:

<ComboBox SelectedValue="{Binding SelectedDataSource, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
          SelectedValuePath="Tag">
    <ComboBoxItem Tag="SourceA" Content="Source A"/>
    <ComboBoxItem Tag="SourceB" Content="Source B"/>
    <ComboBoxItem Tag="SourceC" Content="Source C"/>
</ComboBox>

查看模型:

public string SelectedDataSource { get; set; } = "SourceA";

如果您打算使用 SelectedIndex 属性 在视图中指定选定值,您应该删除绑定。