Двухсторонняя привязка данных WPF - редактируемый комбинированный список для представления данных - PullRequest
2 голосов
/ 04 февраля 2010
<ComboBox Height="23" Margin="52,64,33,0" Name="comboBox1"  
              IsSynchronizedWithCurrentItem="True"
              IsEditable="True"
              DisplayMemberPath="Value" 
              SelectedItem="{Binding Path=Number, Mode=TwoWay}"
              />

public class Number : INotifyPropertyChanged
    {
        private string value;
        public string Value
        {
            get
            {
                return value;
            }
        set
        {
            this.value = value;
            this.PropertyChanged(this, new PropertyChangedEventArgs("Value"));
        }
    }

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged = delegate { };

    #endregion
}

 comboBox1.ItemsSource = new Number[] { new Number() { Value = "One" },
                                                   new Number() { Value = "Two" },
                                                   new Number() { Value = "Three" }};

Мой связанный набор данных не изменяется, когда я редактирую комбинированный текст. т.е., привязка к источнику не происходит.

1 Ответ

1 голос
/ 04 февраля 2010

добавление к тому, что Джош советует ... сначала вам следует подумать об использовании имени переменной diff, а затем "value",во-вторых, вы не должны запускать событие PropertyChanged, если значение не меняется.

добавьте это в установщик свойств ....

if ( value != this.value )
{

}

в-третьих, вы не привязаны к экземпляру ваших данных, ваша привязка к типу вашего класса

SelectedItem="{Binding Path=Number, Mode=TwoWay}"

в-четвертых, вы должны установить ItemSource в вашем комбинированном списке на ObservableCollection< Number >

и, наконец, вы должны проверить Отличная запись Беа о отладке привязки данных. У нее много замечательных примеров.1016 *

хорошо, теперь, когда у меня есть доступ к моему компилятору ... вот что вам нужно сделать.
Во-первых, ГДЕ находится свойство Number, к которому вы привязываетесь?вы не можете привязать обратно к списку, который является источником вашего комбинированного списка.

вам нужно добавить ElementName к привязке или установить DataContext для объекта, который содержит свойство Number.Во-вторых, это свойство Number, где бы оно ни находилось, должно быть либо Notify, либо DependencyProperty.
Например, ваш класс Window будет выглядеть следующим образом .....

   public partial class Window1 : Window
   {
      public Number Number
      {
         get { return (Number)GetValue(ValueProperty); }
         set { SetValue(ValueProperty, value); }
      }

      public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(Number),typeof(Window1), new UIPropertyMetadata(null));

   }

и вашWindow.xaml будет выглядеть так ...

<Window x:Class="testapp.Window1"
          x:Name="stuff"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <ComboBox Height="23" Margin="52,64,33,0" Name="comboBox1"  
              IsEditable="True"
              DisplayMemberPath="Value" 
              SelectedItem="{Binding ElementName=stuff, Path=Number, Mode=TwoWay}"
        />
    </Grid>
</Window>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...