[Binding] Comment le faire fonctionner TwoWay sur une Collection<String> ?
J'essaie de faire un binding TwoWay sur une collection de string ObservableCollection<string>. La collection est affichée correctement, mais je n'arrive pas à mettre à jour les éléments de la collection.
Et j'ai le même problème avec une collection de "int" et surement avec toutes les collections de type de base.
Voici le code C#
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
public partial class ListViewTest : Window
{
ObservableCollection<string> _GameCollection = new ObservableCollection<string>();
public ListViewTest()
{
_GameCollection.Add("World Of Warcraft");
_GameCollection.Add("Halo");
_GameCollection.Add("Gears Of War");
InitializeComponent();
}
public ObservableCollection<string> GameCollection
{
get
{
return _GameCollection;
}
set
{
_GameCollection = value;
}
}
private void AddRow_Click(object sender, RoutedEventArgs e)
{
_GameCollection.Add("A New Game");
}
} |
et le XAML
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
<Window x:Class="ListViewTest.Test2.ListViewTest"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="{Binding RelativeSource={RelativeSource Self}}"
Title="Some Game Data" Height="216" Width="435">
<StackPanel>
<TextBox Text="{Binding Titre,Mode=TwoWay}"/>
<ListView ItemsSource="{Binding GameCollection}">
<ListView.View>
<GridView>
<GridViewColumn Width="140" Header="Game Name" >
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding .,Mode=TwoWay}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
<Button HorizontalAlignment="Right" Margin="5,5,5,5" Content="Add Row" Click="AddRow_Click" />
</StackPanel>
</Window> |
Est ce que j'ai fait une erreur dans le binding ou y a t-il une explication logique de ce mode de fonctionnement.
ça fonctionne si je crée un classe wrapper du style
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
public class StringWrapper
{
public StringWrapper() : this(String.Empty)
{
}
public StringWrapper(string s)
{
String = s;
}
public string StringWrapper
{
get { return String ; }
set { String = value; }
}
string m_String ;
} |
Avez-vous une idée ?