Я пытаюсь сделать Facebook-клиент, и у меня есть файл XAML:
<UserControl x:Class="UISkripsi3.Sidebar"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:UISkripsi3="clr-namespace:UISkripsi3"
xmlns:local="clr-namespace:UISkripsi3">
<UserControl.Template>
<ControlTemplate TargetType="{x:Type UISkripsi3:Sidebar}">
<DataTemplate x:Key="StatusAndOther" DataType="{x:Type local:NewsFeedResources}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal" VerticalAlignment="Top" Margin="10">
<Image x:Name="ProfilePicture" Source="{Binding Path=ProfilePict}" Stretch="Fill" Width="80" Height="80" VerticalAlignment="Top"></Image>
<StackPanel Orientation="Vertical" Margin="5">
<TextBlock Text="{Binding Path=UserName}" Style="{StaticResource UserNameStyle}" VerticalAlignment="Top"/>
<TextBlock Text="{Binding Path=Message}" Foreground="White" TextWrapping="Wrap" Width="400" VerticalAlignment="Top" HorizontalAlignment="Left"/>
<StackPanel Orientation="Horizontal">
<Image x:Name="Icon" Source="{Binding Path=icon}" Width="10" Height="10"></Image>
<TextBlock Text=" via " Foreground="White"></TextBlock>
<TextBlock Text="{Binding Path=attribution}" Foreground="White"></TextBlock>
<StackPanel Orientation="Vertical">
<Button x:Name="LikeButton" VerticalAlignment="Top" Content="like" IsEnabled="{Binding canLike}" ToolTip="Like" Click="LikeButtonClick">
<Button.Style>
<Style BasedOn="{StaticResource LikeButtonStyle}" TargetType="Button">
<Setter Property="Visibility" Value="Visible" />
<Style.Triggers>
<DataTrigger Binding="{Binding hasLiked}" Value="True">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
<Button x:Name="RemoveLikeButton" VerticalAlignment="Center" Content="remove like" IsEnabled="{Binding hasLiked}" ToolTip="Remove Like" Click="RemoveLikeButtonClick">
<Button.Style>
<Style BasedOn="{StaticResource RemoveLikeButtonStyle}" TargetType="Button">
<Setter Property="Visibility" Value="Visible" />
<Style.Triggers>
<DataTrigger Binding="{Binding hasLiked}" Value="False">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
</StackPanel>
</StackPanel>
</StackPanel>
</StackPanel>
</StackPanel>
<StackPanel Orientation="Vertical">
<ListView Name="NewsFeedList" Width="700" Height="500" Margin="10"
ItemsSource="{Binding Source={x:Static local:Sidebar.newsFeedResourcesCoba2}}"
Background="Black"
ItemTemplateSelector="{StaticResource myDataTemplateSelector}" Focusable="False">
</ListView>
</StackPanel>
</Grid>
</DataTemplate>
</ControlTemplate>
</UserControlTemplate>
</UserControl>
Тогда у меня есть класс, подобный этому
public class NewsFeedResources : System.Windows.Controls.UserControl, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public string UserName { get; set; }
public string Id { get; set; }
public string Message { get; set; }
public string IdPost { get; set; }
public byte[] ProfilePict { get; set; }
public string DestinationName { get; set; }
public string to { get; set; }
public byte[] UploadedPict { get; set; }
public byte[] Attachment { get; set; }
public string Description { get; set; }
public string type { get; set; }
public string nameWallPost { get; set; }
public string captionWallPost { get; set; }
public string link { get; set; }
public byte[] icon { get; set; }
public string attribution { get; set; }
public bool canLike
{
get { return this.canLike; }
set
{
if (this.canLike != value)
{
this.canLike = value;
this.OnPropertyChanged("canLike");
}
}
}
public bool hasLiked
{
get { return this.hasLiked; }
set
{
if (this.hasLiked != value)
{
this.hasLiked = value;
this.OnPropertyChanged("hasLiked");
}
}
}
private void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
Вот что происходит, когда мы нажимаем кнопку LikeButton
private void LikeButtonClick(object sender, RoutedEventArgs e)
{
Button btn = (Button)sender;
NewsFeedResources obj = btn.DataContext as NewsFeedResources;
if (null != obj)
{
//MessageBox.Show(obj.IdPost);
webClient.DownloadString(obj.IdPost);
obj.canLike = false;
obj.hasLiked = true;
}
}
Я хочу спросить, как я могу автоматически превратить пользовательский интерфейс из Like в Unlike и наоборот, используя INotifyPropertyChanged, потому что в моем исходном коде он столкнулся с бесконечной ошибкой цикла на get {return this.canLike; }. Спасибо за помощь ребятам