1

のデータバインディングを設定するObservable Collection際、次のコンテキストで: WPF を使用して XAML で CollectionChanged Handler を実装するすべてのバインディングは正しく機能していますが、ListBox 内の ItemsSource によって定義されたプロパティを変更することに加えて、手動で更新する必要があることがわかりました。次のようなコードを含む UI のビジュアル コンテナー:

XAML:

<Grid DataContext="{Binding ElementName=PollPublicStockMainWindow}">
        <ListBox Height="132" HorizontalAlignment="Left" Name="lbFiles" 
                 VerticalAlignment="Top" Width="167" 
                 Margin="{StaticResource ConsistemtMargins}"  
                 ItemsSource="{Binding LbItems}">
            <ListBox.InputBindings>
                <KeyBinding Key="Delete" Command="local:MainWindow.DeleteEntry"/>
            </ListBox.InputBindings>
        </ListBox>
</Grid>

分離コード:

public partial class MainWindow : Window 
{
    public MainWindow() 
    {
        InitializeComponent();
        LbItems = new ObservableCollection<string>();
        LbItems.CollectionChanged += lbFiles_CollectionChanged;
    }

    private void lbFiles_CollectionChanged(object sender, 
         System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
    {
        MemoryPersistentStorageBridge memBridge = GetPersistentStorageBridge;
        List<string> newFileList = new List<string>();

        foreach (string str in LbItems) {
            DoSomethingWithNewString(str); //these 2 lines are always paired?  
            lbFiles.Items.Add(str); // this should NOT be needed 
         }
    }
}

バインディングがありませんか?

4

1 に答える 1

3

PropertyChanged設定時に発砲しますLbItemsか?そのようには見えません。コンストラクターでは、最初に呼び出しInitializeComponentてから、でコレクションを初期化しLbItems = new ObservableCollection<string>();ます。バインディングはすでに処理されているため、コレクションは「遅すぎます」と初期化されていると思います。が設定されているときに変更されたプロパティを起動しない場合LbItems、バインディングは実際にコレクションにバインドするように更新されません。

于 2013-01-18T18:06:57.313 に答える