C #: привязать TextBox к SelectedValue - PullRequest
0 голосов
/ 19 ноября 2009

У меня есть список <> объектов, которые я привязал к ListBox. Затем я хочу привязать свойства SelectedValue к различным текстовым полям. Хотя поведение очень странное.

При связывании имени (строки), которое используется в качестве DisplayMember для ListBox, оно не обновляет ListBox и, если я пытаюсь обновить привязку к событию TextChanged, оно не обновляется до тех пор, пока выбор не изменится а затем возникают проблемы с переключением выбора.

При связывании Balance (десятичное число) он изменяет все из них (или, возможно, изменение применяется, когда я изменяю выбор, но фактически изменяет данные, а не просто не обновляет).

Чтобы было ясно, я использую C # .NET, а не ASP.

Ответы [ 2 ]

1 голос
/ 19 ноября 2009

В предположении WPF, быстрый образец:

<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">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition />
            <RowDefinition />
        </Grid.RowDefinitions>
        <ListBox x:Name="list" 
                 ItemsSource="{Binding}"
                 DisplayMemberPath="Name"/>
        <TextBox Text="{Binding ElementName=list, Path=SelectedItem.Name}"
                 Grid.Row="1"/>
        <TextBox Text="{Binding ElementName=list, Path=SelectedItem.Val}"
                 Grid.Row="2" />
    </Grid>
</Window>

namespace WpfApplication1 {
    public class Thing : INotifyPropertyChanged {
        private string _name;
        private double _val;

        public string Name {
            get { return _name; }
            set {
                _name = value;
                OnPropertyChanged("Name");
            }
        }

        public double Val {
            get { return _val; }
            set {
                _val = value;
                OnPropertyChanged("Val");
            }
        }

        protected void OnPropertyChanged(string propertyName) {
            PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
            if (propertyChanged != null) {
                propertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }

    public partial class MainWindow : Window {
        public MainWindow() {
            InitializeComponent();

            DataContext = new List<Thing> { new Thing { Name = "A", Val = 1.0 }, new Thing { Name = "B", Val = 2.0 } };
        }
    }
}
0 голосов
/ 30 декабря 2009

Я нашел решение на Включите код . По сути, мне нужно использовать коллекцию BindingList, а не просто List.

...