Невозможно изменить привязку данных в текстовом блоке, если выбран элемент в представлении списка MVVM - PullRequest
0 голосов
/ 26 июня 2019

У меня проблема. Я не могу изменить привязку данных при выборе элемента в списке

Это Мой мой код xaml (Просмотр):

 <ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled" ItemsSource="{Binding FCsource, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}">

            <ListView.ItemTemplate>
                <DataTemplate>
                    <Border Margin="10" Width="440" Height="220" >
                        <Grid>
        <TextBlock Text="{Binding Words, Mode = TwoWay}"></TextBlock>
    </Grid>
                    </Border>
                </DataTemplate>
            </ListView.ItemTemplate>

            <ListView.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel Orientation="Horizontal" />
                </ItemsPanelTemplate>
            </ListView.ItemsPanel>

Это мой мой код в ViewModel:

public ObservableCollection _FCsource;

public ObservableCollection FCsource {get {return AddFlashCard (); } set {FCsource = value; OnPropertyChanged (); }}

private Item _SelectedItem;
public Item SelectedItem { get=>_SelectedItem; set
    {
        _SelectedItem = value;
        OnPropertyChanged();
        if(_SelectedItem!=null)
        {
            SelectedItem.Words="hello"
        }
    }   
}
public WordsViewModel()
{

}

private ObservableCollection<Item> AddFlashCard()
{
    ObservableCollection<Item> listmn = new ObservableCollection<Item>();
    listmn.Add(new Item("qwda");
    listmn.Add(new Item("qwda");
    listmn.Add(new Item("qwda");
    return listmn;
}

1 Ответ

0 голосов
/ 26 июня 2019

С некоторыми изменениями в вашем коде (там есть ошибки компиляции) он работает как положено. Как и ожидалось, он перестает работать, если нет интерфейса INotifyPropertyChanged, правильно реализованного в классе Item (в частности, сигнализирует об изменениях свойства Words). Это, вероятно, то, что вызывает вашу проблему.

Ниже приведен рабочий код (здесь INotifyPropertyChanged реализован с использованием пакета PropertyChanged.Fody version 2.6.0 nuget):

[AddINotifyPropertyChangedInterface]
public class WordsViewModel
{

    public ObservableCollection<WordItem> _FCsource;

    public ObservableCollection<WordItem> FCsource { get { return AddFlashCard(); } set { FCsource = value; } }

    private WordItem _SelectedItem;
    public WordItem SelectedItem
    {
        get => _SelectedItem; set
        {
            _SelectedItem = value;
            if (_SelectedItem != null)
            {
                SelectedItem.Words = "hello";
            }
        }
    }
    public WordsViewModel()
    {       
    }

    private ObservableCollection<WordItem> AddFlashCard()
    {
        ObservableCollection<WordItem> listmn = new ObservableCollection<WordItem>();
        listmn.Add(new WordItem("qwda"));
        listmn.Add(new WordItem("qwda"));
        listmn.Add(new WordItem("qwda"));
        return listmn;
    }
}

[AddINotifyPropertyChangedInterface]
public class WordItem
{
    public string Words { get; set; }
    public WordItem(string words)
    {
        Words = words;
    }
}

Если вы правильно внедрили INotifyPropertyChanged и он все еще не работает, то уверены ли вы, что вы присвоили свою модель представления для DataContext вашего представления?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...