12

私はWPFが初めてです。

文字列のコレクションをコンボボックスにバインドしようとしています。

public ObservableCollection<string> ListString {get; set;}

バインディングとデータコンテキストは次のように設定されています

<Window 
        x:Class="Assignment2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:validators="clr-namespace:Assignment2"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525"
        DataContext="{Binding RelativeSource={RelativeSource Self}, Path=.}">
    <Grid>
        <ComboBox  Height="23" HorizontalAlignment="Left" Margin="109,103,0,0" Name="StringComboBox" VerticalAlignment="Top" Width="120" SelectionChanged="StringComboBox_SelectionChanged">
            <ComboBox.ItemsSource>
                <Binding Path="ListString" BindsDirectlyToSource="True" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"></Binding>
            </ComboBox.ItemsSource>
        </ComboBox>

コレクションが更新されているため、これが起こっていることがわかりました。私が書いたら

public MainWindow()
        {

            InputString = "";
            ListString = new ObservableCollection<string>();
            ListString.Add("AAA");
            ListString.Add("BBB");
            ListString.Add("CCC");
          InitializeComponent();

        }

それは機能しますがInitializeComponent()、次のように最初の行で上に移動すると機能しません。

  public MainWindow()
            {
               InitializeComponent();
                InputString = "";
                ListString = new ObservableCollection<string>();
                ListString.Add("AAA");
                ListString.Add("BBB");
                ListString.Add("CCC");                
            }

私は何をすべきか??

4

4 に答える 4

1

コード ビハインドでコンボボックスの項目ソースを設定するか、リストにデータが入力された後に datacontext を再度設定するか、inotifychanged を使用してプロパティの変更を発生させることができます。

public MainWindow()
        {
            InitializeComponent();
            InputString = "";
            ListString = new ObservableCollection<string>();
            ListString.Add("AAA");
            ListString.Add("BBB");
            ListString.Add("CCC");
            StringComboBox.ItemsSource = ListString;

        }
于 2013-10-24T13:27:01.140 に答える