2012-04-26 12 views
0

アプリケーションのTabControlで使用すると、私が書いたUserControlに問題があります。 TabControlはDataBoundで、テンプレートを使用します。現在のタブ(MouseClickごと)の変更時に、バウンドプロパティはnullに設定されます。現在選択されているアイテムをViewModelに保持したいと思います。私がDataGridまたはListBoxを使用すると、すべてが疑わしいものとして機能します。 ViewModelのSelectedItemプロパティがnullに設定されていません。tabchangeがバインドされた値を変更するのはなぜですか

おそらく私は自分のDependencyPropertyを別にセットアップする必要がありますか?関係するプロパティは次のように定義されます。

SelectedItemProperty = DependencyProperty.Register("SelectedItem", typeof(object), typeof(BusinessListEditor), new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); 
ItemsSourceProperty = DependencyProperty.Register("ItemsSource", typeof(IEnumerable), typeof(BusinessListEditor), new FrameworkPropertyMetadata(null)); 

このプロパティは、UserControl内のDataGridに直接バインドされています。

<DataGrid x:Name="dgDataGrid" 
       ItemsSource="{Binding ItemsSource, 
            ElementName=ucBusinessListEditor}" 
       SelectedItem="{Binding SelectedItem, 
            ElementName=ucBusinessListEditor}" 
       Style="{Binding DataGridStyle, 
           ElementName=ucBusinessListEditor}" /> 

SelectedTab-ChangeでSelectedItem-Propertyが変更されないようにする方法について質問します。私はこれを分析しようとしましたが、その事を完全には理解していません。どうやらSelectedItemChangedは、DataGridのItemsChangedから来ています。

+0

'SelectedItem'のバインディングを' Mode = OneWayToSource'として設定しようとしましたか? –

+0

今すぐ試してみてください。そして、私はViewModelからSelectedItemを設定する可能性はありません... – SACO

+0

申し訳ありませんが、ちょうど間違った列挙値! Mode = OneWayを使用する必要があります –

答えて

0

現在のタブを変更すると、古いものがビジュアルツリーからアンロードされます。これは、DataGridを意味し、SelectedItemを意味しません。

stop this behaviourに、またはPropertyChangedCallbackのヌルでないDPから最後のSelectedItemをバックアップしてみてください。

+0

なぜ、DataGridまたはListBoxを使用する場合、ViewModelのSelectedItemはnullに設定されませんが、BusinessListEditorを使用する場合はnullに設定されます。 – SACO

+0

私は言うことができません。私はあなたのBusinessListEditorとあなたのアプリケーションの構造を知らない。 – LPL

+0

上記のプロパティの場合、追加のロジックは存在しません。この2つのプロパティとDataGridの内部だけです。 – SACO

関連する問題