有没有办法在 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; }
注意:这似乎是因为我的UserControl
在Flyout
内。当在 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
属性 在视图中指定选定值,您应该删除绑定。
我有一个 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; }
注意:这似乎是因为我的UserControl
在Flyout
内。当在 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
属性 在视图中指定选定值,您应该删除绑定。