绑定到绑定物品?
Bind to bound item?
我有 Comments
class,我绑定的是:
<ListBox ItemsSource="{Binding CommentFiles}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Text}" TextWrapping="Wrap"/>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding UserId}"/> <!-- Here should be username -->
<TextBlock Text=","/>
<TextBlock Text="{Binding CreatedAt}"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
如您所见,Comments
class 有 UserId
属性,这只是一些字符组合。我可以使用异步 getUser(userID)
方法获得 User
class 对象。
当我绑定到评论时,我想查看用户的用户名(在 User
class 中)而不是 UserId。
而且我无法编辑 classes。有办法吗?
您可以将 userId 与采用 userId 的值转换器结合使用,调用 getUser(value) 和 returns 用户名。
<TextBlock Text="{Binding UserId, Converter={StaticResource MyUserIdConverter}" />
值转换器看起来像:
public class MyUserIdConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
// Add some checks here ;-)
return GetUser((string) value);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
基于我的评论的一个小例子。您可以加载完整的用户,也可以仅加载用户名。
public class ExtendedCommentFile
{
private readonly CommentFile _comment;
public ExtendedComment(CommentFile comment)
{
_comment = comment;
}
public int UserId
{
get { return _comment.UserId; }
set { _comment.UserId = value; }
}
public User User
{
get { return LoadTheUserHereOrInVM(); }
}
public string Username
{
get { return LoadTheUserNameHereOrInVM(); }
}
}
/// <summary>
/// This is the unchangeable commentfile class
/// </summary>
public class CommentFile
{
public string Text { get; set; }
public int UserId { get; set; }
public DateTime CreatedAt { get; set; }
}
/// <summary>
/// This is unchangeable user class
/// </summary>
public class User
{
}
我有 Comments
class,我绑定的是:
<ListBox ItemsSource="{Binding CommentFiles}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Text}" TextWrapping="Wrap"/>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding UserId}"/> <!-- Here should be username -->
<TextBlock Text=","/>
<TextBlock Text="{Binding CreatedAt}"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
如您所见,Comments
class 有 UserId
属性,这只是一些字符组合。我可以使用异步 getUser(userID)
方法获得 User
class 对象。
当我绑定到评论时,我想查看用户的用户名(在 User
class 中)而不是 UserId。
而且我无法编辑 classes。有办法吗?
您可以将 userId 与采用 userId 的值转换器结合使用,调用 getUser(value) 和 returns 用户名。
<TextBlock Text="{Binding UserId, Converter={StaticResource MyUserIdConverter}" />
值转换器看起来像:
public class MyUserIdConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
// Add some checks here ;-)
return GetUser((string) value);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
基于我的评论的一个小例子。您可以加载完整的用户,也可以仅加载用户名。
public class ExtendedCommentFile
{
private readonly CommentFile _comment;
public ExtendedComment(CommentFile comment)
{
_comment = comment;
}
public int UserId
{
get { return _comment.UserId; }
set { _comment.UserId = value; }
}
public User User
{
get { return LoadTheUserHereOrInVM(); }
}
public string Username
{
get { return LoadTheUserNameHereOrInVM(); }
}
}
/// <summary>
/// This is the unchangeable commentfile class
/// </summary>
public class CommentFile
{
public string Text { get; set; }
public int UserId { get; set; }
public DateTime CreatedAt { get; set; }
}
/// <summary>
/// This is unchangeable user class
/// </summary>
public class User
{
}