私は、私を逃しているDatePickerに非常に単純なバインディングの問題があります。Silverlight DatePickerバインディングが壊れています - これを修正するには何ができますか?
私はListBoxをDateTimeプロパティを持つオブジェクトのリストにバインドしています。選択した項目を変更するページの編集部分があります。これはうまくいきます - DatePickerで日付を更新すると、ListBoxに更新日が表示されます。
ただし、別のアイテムを選択すると、DatePickerコントロールによって、新しいアイテムのDateも誤って更新されます。
ここに私のコードです:
C#:
using System;
using System.Collections.ObjectModel;
using System.ComponentModel;
namespace BindingTest
{
public partial class MainPage
{
public MainPage()
{
InitializeComponent();
var vm = new ViewModel();
DataContext = vm;
}
}
public class ViewModel : INotifyPropertyChanged
{
public ViewModel()
{
List = new ObservableCollection<Item>();
for (var n = 0; n < 10; n++)
List.Add(new Item { Date = DateTime.Now.AddDays(n) });
}
public ObservableCollection<Item> List { get; set; }
private Item _selectedItem;
public Item SelectedItem
{
get { return _selectedItem; }
set { _selectedItem = value; OnPropertyChanged("SelectedItem"); }
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
public class Item : INotifyPropertyChanged
{
private DateTime _date;
public DateTime Date
{
get { return _date; }
set { _date = value; OnPropertyChanged("Date"); }
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propName));
}
}
}
XAML:
<UserControl xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" x:Class="BindingTest.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid x:Name="LayoutRoot" Background="White">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<ListBox ItemsSource="{Binding List}"
DisplayMemberPath="Date"
SelectedItem="{Binding SelectedItem, Mode=TwoWay}" />
<StackPanel Grid.Column="1" DataContext="{Binding SelectedItem}">
<TextBlock Text="Date:" />
<sdk:DatePicker SelectedDate="{Binding Date, Mode=TwoWay}" />
</StackPanel>
</Grid>
</UserControl>
私はこれをどのように修正することができますか?
あなたは手の込んだことはできますか?私はdatepickers(celltemplateの方法で)を保持する列のDataGridを持っています。データグリッドは日付によって自動的にソートされ、その時点で他の行が新たに入力された値に変更されます。同じバグのように聞こえる。私はDispatcherTimerでソートメソッドを遅らせましたが、それは問題を解決しませんでした。 –