我有一个WPF项目,在XAML文件中我有一个listview并绑定到字典。但每当我更改字典值的值时,它都不会绑定回UI。谁能帮忙。
我的代码示例如下所示。
.XAML文件:
<DockPanel Grid.Row="1" Grid.Column="0">
<Border BorderBrush="SkyBlue" BorderThickness="1,1,1,1"></Border>
<StackPanel>
<ListView Margin="0" ScrollViewer.HorizontalScrollBarVisibility="Hidden" Name="lvAlphaKeys" BorderThickness="0" ItemsSource="{Binding AlphaKeys, Mode=TwoWay}" >
<ListView.ItemTemplate>
<DataTemplate>
<WrapPanel>
<TextBlock Text="{Binding Key}" Width="30" FontWeight="Bold" />
<TextBlock Text="{Binding Value.DispalyName, Mode=TwoWay}" />
</WrapPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView.ItemTemplate>
</ListView>
</StackPanel>
</DockPanel>
查看型号:
public class MyViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
private Dictionary<string, MyCommand> _AlphaKeys;
public Dictionary<string, MyCommand> AlphaKeys
{
get { return _AlphaKeys; }
set
{
_AlphaKeys = value;
OnPropertyChanged(new PropertyChangedEventArgs("AlphaKeys"));
}
}
}
public class MyCommand
{
public string DispalyName { get; set; }
public string DisplaySymbol { get; set; }
}
.XaML.CS文件:
//Field declaration
MyViewViewModel viewModel;
//Constructur
viewModel = new MyViewViewModel();
DataContext = viewModel;
//Event
viewModel.AlphaKeys[key].DispalyName = "new value";
如果我设置itemsource = null,然后重新分配列表值的Itemsource,它正在工作,否则不工作,任何人都可以帮忙吗? lvAlphaKeys.ItemSource = null; lvAlphaKeys..ItemSource = viewModel.AlphaKeys;
您为AlphaKeys
设置了事件,如果集合已更改,则会引发事件,而不是针对其项目。
你必须为你的INotifyPropertyChanged
设置MyCommand
,
public class MyCommand : INotifyPropertyChanged
{
private string _dispalyName ;
public string DispalyName
{
get { return _dispalyName ; }
set
{
_dispalyName = value;
NotifyOfPropertyChange("DispalyName");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected void NotifyOfPropertyChange(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}