フォーカスが失われたときにリストボックスのテキストボックスが更新されない

mrsargent

リストボックス内にテキストボックスがあり、テキストボックスがフォーカスを失ったときにObservableCollectionを更新したいと思います。この投稿説明されているように、コレクションのCollectionChangedイベントを使用して、問題を解決しようとしました。現在、コレクションを更新する唯一の方法は、リストボックスにアイテムを追加またはリストボックスから削除することです。私はこれについて間違った方法で行っていますか?コレクションを更新するためのテキストボックスに何が欠けていますか?

MainWindow.xaml

<ListBox ItemsSource="{Binding DataLogList,Mode=TwoWay}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <Label Content="{Binding DataLogLabel}" Margin="5"/>
                        <TextBox Text="{Binding DataLogName,Mode=TwoWay,UpdateSourceTrigger=LostFocus}" Margin="5" Width="150"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

MainViewModel.cs

public MainViewModel()
    { 
        DataLogList = new ObservableCollection<DataLogContent>();
        DataLogList.CollectionChanged += (s, e) =>
        {                
            if (e.NewItems != null)
            {
                foreach (DataLogContent item in e.NewItems)
                {
                    item.PropertyChanged += item_PropertyChanged;
                }
            }

            if (e.OldItems != null)
            {
                foreach (DataLogContent item in e.OldItems)
                {
                    item.PropertyChanged -= item_PropertyChanged;
                }
            }
        };
    }

    void item_PropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        NotifyPropertyChanged();
    }

DataLogContent.cs

public class DataLogContent:ViewModelBase
{
    private string dataLogLabel;
    public string DataLogLabel
    { 
        get { return this.dataLogLabel; }
        set
        {
            this.dataLogLabel = value;
            NotifyPropertyChanged();
        }
    }

    private string dataLogName;
    public string DataLogName
    {
        get { return this.dataLogName; }
        set
        {
            this.dataLogLabel = value;
            NotifyPropertyChanged();
        }
    }       
}
d.moncada

これに基づいて動作させています。私の推測では、内のアイテムの追加/削除ロジックを複雑にしすぎている可能性がありObservableCollectionます。各オブジェクトは、その中のプロパティが変更されるたびにすでにイベントを発生させるため、プロパティ変更イベントを監視する必要はありません。

これが私が持っているものです:

namespace WpfApplication1
{
    public class MainViewModel : ViewModelBase
    {
        public ObservableCollection<DataLogContent> DataLogList { get; private set; }

        public MainViewModel()
        {
            DataLogList = new ObservableCollection<DataLogContent>();
            DataLogList.Add(new DataLogContent
            {
                DataLogLabel = "Label",
                DataLogName = "Name"
            });

            DataLogList.Add(new DataLogContent
            {
                DataLogLabel = "Label2",
                DataLogName = "Name2"
            });
        }
    }

    public class DataLogContent : ViewModelBase
    {
        private string dataLogLabel;
        public string DataLogLabel
        { 
            get { return this.dataLogLabel; }
            set
            {
                this.dataLogLabel = value;
                OnPropertyChanged("DataLogLabel");
            }
        }

        private string dataLogName;
        public string DataLogName
        {
            get { return this.dataLogName; }
            set
            {
                this.dataLogName = value;
                OnPropertyChanged("DataLogName");
            }
        }       
    }
}

単純なViewModelBase:

namespace WpfApplication1
{
    public class ViewModelBase : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        public void OnPropertyChanged(string property)
        {
            var handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(property));
            }
        }
    }
}

Xaml:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <ListBox ItemsSource="{Binding DataLogList,Mode=TwoWay}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <Label Content="{Binding DataLogLabel}" Margin="5"/>
                    <TextBox Text="{Binding DataLogName,Mode=TwoWay,UpdateSourceTrigger=LostFocus}" Margin="5" Width="150"/>
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Window>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

テキストボックスのフォーカスが失われると、リストボックスアイテムの選択が解除されます

分類Dev

さまざまなテキストボックスで計算を行い、フォーカスが失われたときにテキストボックスに表示する方法

分類Dev

JQueryボタンをクリックすると、編集可能なdivで強調表示されたテキストのフォーカスが失われます

分類Dev

フォーカスが失われたときに日付ピッカーテキストボックスの変換/検証を無効にする

分類Dev

テキストボックスのフォーカスが失われたため、ボタンを2回クリックする必要があります

分類Dev

テキストボックスのフォーカスが失われたため、ボタンを2回クリックする必要があります

分類Dev

テキストボックスがクリックされたときにボタンにフォーカスする方法

分類Dev

ボタンがクリックされたときにテキストボックスの値を更新する

分類Dev

テキストボックスでフォーカスが失われるのを防ぐ

分類Dev

テキストボックスでフォーカスが失われるのを防ぐ

分類Dev

フォーカスがテキストボックスにあるときにクリック時のJqueryが機能しない

分類Dev

C#-別のスレッドでエントリがリストに追加されたときにリストボックスが更新されない

分類Dev

AngularJSでラジオボタンが選択されているときにテキストボックスにフォーカスする

分類Dev

ロードされたテキストファイルが変更されたときにC#リストボックスを更新する

分類Dev

ボタンがクリックされたときにクリップボードにテキストエリアのテキストをコピーする

分類Dev

入力テキストボックスに文字が挿入されたときのタブカーソル

分類Dev

ボタンが送信されたときにjavascriptがテキストボックスの内容をリセットしない

分類Dev

テキストボックスにフォーカスがあるときにエラーボックスをクリアしようとしています

分類Dev

ボタンをクリックしてもテキストボックスの値が更新されない

分類Dev

ユーザーがテキストボックスを離れたときに、テキストボックスのデフォルトのテキストに戻すにはどうすればよいですか?

分類Dev

フォーカスが失われたときのグリッドビューのチェックボックス状態スタイル

分類Dev

リストボックスの移動にフォーカスを合わせると、同じウィンドウ上の複数のリストボックスが選択されない

分類Dev

ボタンがクリックされたときにテキストボックスを表示する

分類Dev

フォーム2のテキストボックスがフォーム1のリストボックスに表示されます

分類Dev

テキストボックスをクリックするときに、フォーカスを与えるが、テキストボックス内のカーソル位置を変更しない方法

分類Dev

Java Swingのテキストボックスとボタンがフォームに表示されませんか?

分類Dev

テキストボックスにフォーカスを失ったときにReactiveUIRaiseAndSetIfChangedヒット

分類Dev

テキストボックスが空のときにフォーカスバックする方法

分類Dev

textareaフォーカスを離れているときにボタンがクリックされない

Related 関連記事

  1. 1

    テキストボックスのフォーカスが失われると、リストボックスアイテムの選択が解除されます

  2. 2

    さまざまなテキストボックスで計算を行い、フォーカスが失われたときにテキストボックスに表示する方法

  3. 3

    JQueryボタンをクリックすると、編集可能なdivで強調表示されたテキストのフォーカスが失われます

  4. 4

    フォーカスが失われたときに日付ピッカーテキストボックスの変換/検証を無効にする

  5. 5

    テキストボックスのフォーカスが失われたため、ボタンを2回クリックする必要があります

  6. 6

    テキストボックスのフォーカスが失われたため、ボタンを2回クリックする必要があります

  7. 7

    テキストボックスがクリックされたときにボタンにフォーカスする方法

  8. 8

    ボタンがクリックされたときにテキストボックスの値を更新する

  9. 9

    テキストボックスでフォーカスが失われるのを防ぐ

  10. 10

    テキストボックスでフォーカスが失われるのを防ぐ

  11. 11

    フォーカスがテキストボックスにあるときにクリック時のJqueryが機能しない

  12. 12

    C#-別のスレッドでエントリがリストに追加されたときにリストボックスが更新されない

  13. 13

    AngularJSでラジオボタンが選択されているときにテキストボックスにフォーカスする

  14. 14

    ロードされたテキストファイルが変更されたときにC#リストボックスを更新する

  15. 15

    ボタンがクリックされたときにクリップボードにテキストエリアのテキストをコピーする

  16. 16

    入力テキストボックスに文字が挿入されたときのタブカーソル

  17. 17

    ボタンが送信されたときにjavascriptがテキストボックスの内容をリセットしない

  18. 18

    テキストボックスにフォーカスがあるときにエラーボックスをクリアしようとしています

  19. 19

    ボタンをクリックしてもテキストボックスの値が更新されない

  20. 20

    ユーザーがテキストボックスを離れたときに、テキストボックスのデフォルトのテキストに戻すにはどうすればよいですか?

  21. 21

    フォーカスが失われたときのグリッドビューのチェックボックス状態スタイル

  22. 22

    リストボックスの移動にフォーカスを合わせると、同じウィンドウ上の複数のリストボックスが選択されない

  23. 23

    ボタンがクリックされたときにテキストボックスを表示する

  24. 24

    フォーム2のテキストボックスがフォーム1のリストボックスに表示されます

  25. 25

    テキストボックスをクリックするときに、フォーカスを与えるが、テキストボックス内のカーソル位置を変更しない方法

  26. 26

    Java Swingのテキストボックスとボタンがフォームに表示されませんか?

  27. 27

    テキストボックスにフォーカスを失ったときにReactiveUIRaiseAndSetIfChangedヒット

  28. 28

    テキストボックスが空のときにフォーカスバックする方法

  29. 29

    textareaフォーカスを離れているときにボタンがクリックされない

ホットタグ

アーカイブ