這不是「在啓動時選擇第N項」 ...它更像是選擇坐在那裏定義爲初始項目的項目並更新組合框。我需要將ItemsSource設置爲CompositeCollection,其中一個項目被定義爲指定(不必是項目0),並設置啓動時選擇的提及的項目。綁定設置爲該項目的內容的事實在這裏起着至關重要的作用。下面的代碼只是演示一個示例應用程序。 UPDATE OF
END 1
我遇到一個小問題,我希望我能得到的解決方案在這裏。我有一個組合框,我想用啓動時選擇的特定項目對它進行初始化。問題是,當我開始應用程序控制是空的,並得到它的價值在第一次打開。我已經成功地提取出有問題的代碼,可能最簡單的形式(排除儘可能多的變量,因爲我可以),它看起來如下的窗口
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"
xmlns:loc ="clr-namespace:WpfApplication1"
x:Class="WpfApplication1.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480">
<StackPanel Orientation="Vertical">
<StackPanel.Resources>
<ComboBoxItem x:Key="toSelectInitially" Content="{Binding Path=ActiveItem, Mode=OneWay}"/>
</StackPanel.Resources>
<ComboBox SelectedIndex="0"
Height="30">
<ComboBox.ItemsSource>
<x:Array Type="{x:Type ComboBoxItem}">
<ComboBoxItem Content="{Binding Path=ActiveItem, Mode=OneWay}"/>
<ComboBoxItem Content="AAA"/>
<ComboBoxItem Content="BBB"/>
</x:Array>
</ComboBox.ItemsSource>
</ComboBox>
<ComboBox SelectedItem="{StaticResource ResourceKey=toSelectInitially}"
Height="30" Loaded="ComboBox_Loaded">
<ComboBox.ItemsSource>
<x:Array Type="{x:Type ComboBoxItem}">
<StaticResource ResourceKey="toSelectInitially"/>
<ComboBoxItem Content="AAA"/>
<ComboBoxItem Content="BBB"/>
</x:Array>
</ComboBox.ItemsSource>
</ComboBox>
<ComboBox SelectedValue="{Binding Path=ActiveItem, Mode=OneWay}"
SelectedValuePath="Content"
Height="30">
<ComboBox.ItemsSource>
<x:Array Type="{x:Type ComboBoxItem}">
<ComboBoxItem Content="{Binding Path=ActiveItem, Mode=OneWay}"/>
<ComboBoxItem Content="AAA"/>
<ComboBoxItem Content="BBB"/>
</x:Array>
</ComboBox.ItemsSource>
</ComboBox>
</StackPanel>
</Window>
代碼背後
XAML代碼:
簡單視圖模型:
using System;
using System.ComponentModel;
namespace WpfApplication1
{
class VMSimple : INotifyPropertyChanged
{
public VMSimple()
{
ActiveItem = string.Concat("Active Item : ", Guid.NewGuid().ToString());
}
private string mActiveItem;
public string ActiveItem
{
get { return mActiveItem; }
private set
{
if (Equals(mActiveItem, value)) return;
mActiveItem = value;
OnPropertyChanged("ActiveItem");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
我試圖使代碼複製過去E-工作。
顯然所有的方法表現相同(選定的價值,指數,項目)。如果我將List設置爲Items而不是ItemsSource,則問題消失,但這不是一個選項。請記住,這是更復雜的代碼的簡化表示,我嘗試使用CompositeCollection,但我用數組替換它來檢查這是不是導致問題。
你想的第一個項目是默認選擇? –
是的,我想要選擇這個特定的項目。行爲是,組合框的內容一旦我第一次打開它,我啓動應用程序就會更新。 – Skomialek
好吧,我看到你已經改變了標題 - 我想選擇項目 - 在我的示例代碼中它是項目0,但它可以是任何索引,值等等。這個概念很重要 - 我選擇了項目(它被選爲屬性,如果我檢查SelectedItem它是正確的值)但組合框的內容不會得到更新,直到我打開它.... – Skomialek