0

アプリケーションでDataGridTemplateColumnを動的に作成しています。これは、TabControlがあり、ユーザーが新しいタブを追加したいときに、TabItemにデータグリッドが作成されるためです。これまでに列を作成するためのコードは次のとおりです。

    private DataGridTemplateColumn GetAccountColumn()
    {
        DataGridTemplateColumn accountColumn = new DataGridTemplateColumn();
        accountColumn.Header = "Account";

        string xaml = @"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">
                            <TextBlock Text=""{Binding Path='Account', Mode=OneWay}"" />
                        </DataTemplate>";

        StringReader stringReader = new StringReader(xaml);
        XmlReader xmlReader = XmlReader.Create(stringReader);

        accountColumn.CellTemplate = (DataTemplate)XamlReader.Parse(xaml);

        xaml = @"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">
                     <ComboBox ItemsSource=""{DynamicResource accounts}"" Text=""{Binding Path='Account', Mode=OneWay}"" Height=""23"" IsTextSearchEnabled=""True""/>
                 </DataTemplate>";

        stringReader = new StringReader(xaml);
        xmlReader = XmlReader.Create(stringReader);

        accountColumn.CellEditingTemplate = (DataTemplate)XamlReader.Parse(xaml);

        return accountColumn;
    }

コンボボックスにはアイテムが完全に入力されています。上記のコードからわかるように、itemsourceは監視可能な文字列のコレクションにバインドされています。実行時に次の方法でリソースにデータを入力します。

Resources["accounts"] = this.Account;

コンボボックスで選択を行ってコンボボックスがフォーカスを失った後を除いて、すべてがうまく機能しているようです。選択した項目はTextBlockに表示されません。このアイテムをTextBlockに表示するにはどうすればよいですか?モードをTwoWayに設定しようとしましたが、「TwoWayまたはOneWayToSourceバインディングは、タイプ「System.Data.DataRowView」の読み取り専用プロパティ「Account」では機能しません」というエラーが表示されます。

4

1 に答える 1

1

SelectedItemプロパティではなく、のプロパティComboBoxをバインドする必要があります。AccountText

 xaml = @"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">
                 <ComboBox ItemsSource=""{DynamicResource accounts}"" SelectedItem=""{Binding Path='Account'}"" Height=""23"" IsTextSearchEnabled=""True""/>
             </DataTemplate>";

編集

別の問題はこれです:

モードをTwoWayに設定しようとしましたが、「TwoWayまたはOneWayToSourceバインディングは、タイプ「System.Data.DataRowView」の読み取り専用プロパティ「Account」では機能しません」というエラーが表示されます。

プロパティが読み取り専用の場合、Account変更することはできず、編集してもまったく意味がありません。書き込み可能にする必要があります。そうしないと、UIから変更できず、データを保存できません。

于 2012-01-03T00:26:45.813 に答える