View не работает с типом из другого проекта
У меня есть список
private ObservableCollection<Player> players = new();
public ObservableCollection<Player> Players
{
get { return players; }
set
{
players = value;
OnPropertyChanged(nameof(Players));
}
}
private Player? chosenPlayer;
public Player? ChosenPlayer
{
get => chosenPlayer;
set
{
chosenPlayer = value;
OnPropertyChanged(nameof(ChosenPlayer));
}
}
У игрока есть свойство Won
.
Есть кнопка, меняющая его значение:
private void OnChangeImageButtonClick(object? ignorable)
{
ChosenPlayer.Won = 100;
OnPropertyChanged(nameof(ChosenPlayer));
}
По нажатию на кнопку зависает ListView
со всеми игроками. То есть при нажатии на любой элемент списка, значение ChosenPlayer
не меняется. (Если кстати после этого поставить прежнее значение у Won
, то ListView
начинает работать как положено). Причем это происходит где-бы я не написал конструкцию типа ChosenPlayer._ = _
.
Но если менять не напрямую, а через еще одну переменную:
private void OnChangeImageButtonClick(object? ignorable)
{
var pl = ChosenPlayer;
ChosenPlayer = null;
pl.Won = value;
ChosenPlayer = pl;
OnPropertyChanged(nameof(ChosenPlayer));
}
То значение успешно записывается. Как менять значение напрямую?
Связанный с этими переменными xaml:
<TextBox Text="{Binding ChosenPlayer.Won, Mode=TwoWay}"></TextBox>
<ListView ItemsSource="{Binding Players}" SelectedItem="{Binding ChosenPlayer}">
<ListView.View>
<GridView>
<GridViewColumn DisplayMemberBinding="{Binding Id}"/>
<GridViewColumn DisplayMemberBinding="{Binding NickName}"/>
</GridView>
</ListView.View>
</ListView>
upd.
Класс Player
у меня объявлен в другом проекте, если продублировать его в vm, то все начинает работать исправно. (Проекты подсоединены, VM с этим классом работает исправно)
Класс Player
:
public class Player
{
[JsonPropertyName("id"), JsonIgnore(Condition = JsonIgnoreCondition.WhenWritingNull)]
public int? Id { get; set; }
[JsonPropertyName("nickname")]
public string NickName { get; set; }
[JsonPropertyName("image_name")]
public string? ImageName { get; set; }
[JsonPropertyName("description")]
public string? Description { get; set; }
[JsonPropertyName("group_number")]
public int? GroupNumber { get; set; }
[JsonPropertyName("won")]
public int? Won { get; set; }
[JsonPropertyName("lose")]
public int? Lose { get; set; }
[JsonPropertyName("points")]
public int? Points { get; set; }
public Player(string nickName,
string? description,
string? imageName = null,
int? id = null,
int? groupNumber = null,
int? won = null,
int? lose = null,
int? points = null)
{
Id = id;
NickName = nickName;
ImageName = imageName;
Description = description;
GroupNumber = groupNumber;
Won = won;
Lose = lose;
Points = points;
}
public override bool Equals(object? obj)
{
if (obj is Player player)
{
bool equal = NickName == player.NickName &&
ImageName == player.ImageName &&
Description == player.Description &&
GroupNumber == player.GroupNumber &&
Won == player.Won &&
Lose == player.Lose &&
Points == player.Points;
if (player?.Id != null)
{
equal &= player.Id == Id;
}
return equal;
}
return false;
}
public override int GetHashCode()
{
return HashCode.Combine(Id, NickName, ImageName, Description, GroupNumber, Won, Lose, Points);
}
}
Как можно View подружить с объектами из другой библиотеки?