わかりました、私は基本的にListView
、特定のスタイルで提示する必要があるコレクションをロードする 2 つの を持っています。そのために、以下に示す a を使用しますDataTemplate
。
両方DataTemplate
で、画像とテキストをロードする必要があります。テキストは問題なく機能しますがURL
、画像の を返すには、 を取得してから を取得し、user id
それらimage hash
をマージして を返す必要がありURL
ます。
だから私がしたことは、 にバインドし、にedされた値user id
を持つコンバーターを使用することです。アイデアは、これら 2 つの値を取得し、コンバーターが final を返すというものです。と はどちらも( )です。ConverterParameter
x:Bind
image hash
string
value
parameter
strings
URI
コンパイル中に(実行時ではなく)errors
、どこでも答えを見つけることができ、それらが何を意味するのかわかりません。イベント値は、行の境界を越えて分割することはできません...
そのままのDataTemplate
s:
xmlns:conv="using:App_Name.Converters"
<conv:IconIdToUrlConverter x:Key="IconIdToUrlConverter"/>
<conv:AvatarIdToUrlConverter x:Key="AvatarIdToUrlConverter"/>
<DataTemplate x:Key="GuildsListDataTemplate" x:DataType="discweb:SocketGuild">
<StackPanel Margin="0,5,0,0">
<Ellipse Width="40" Height="40">
<Ellipse.Fill>
<ImageBrush ImageSource="{x:Bind IconId, Mode=OneWay,Converter={StaticResource IconIdToUrlConverter},ConverterParameter={x:Bind Id,Mode=OneWay}}"/>
</Ellipse.Fill>
</Ellipse>
<TextBlock TextAlignment="Center" TextWrapping="WrapWholeWords" Margin="0,2,0,0" Text="{x:Bind Name, Mode=OneWay}" Foreground="White" FontSize="12" />
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="GuildUsersListDataTemplate" x:DataType="discweb:SocketGuildUser">
<StackPanel Orientation="Horizontal" Margin="0,0,2,0">
<Ellipse Width="10" Height="10">
<Ellipse.Fill>
<ImageBrush ImageSource="{x:Bind AvatarId, Mode=OneWay,Converter={StaticResource AvatarIdToUrlConverter},ConverterParameter={x:Bind Discriminator,Mode=OneWay}}"/>
</Ellipse.Fill>
</Ellipse>
<TextBlock TextAlignment="Center" TextWrapping="WrapWholeWords" Text="{x:Bind Username,Mode=OneWay}" Foreground="White" FontSize="10" />
</StackPanel>
</DataTemplate>
そしてListView
(2つのうちの1つですが、同じですが):
<ListView ScrollViewer.HorizontalScrollBarVisibility="Disabled"
ScrollViewer.IsHorizontalRailEnabled="False"
ItemsSource="{x:Bind ChatViewModel.GuildUserList, Mode=OneWay}"
SelectionMode="None" Grid.Column="1"
ItemTemplate="{StaticResource GuildUsersListDataTemplate}"/>
注:Visual Studio 2017
現在あるの最新バージョンを使用しています!また、コンパイラBinding
の代わりにを使用しx:Bind
てもエラーは発生しないことを確認しましたが、バインドが を検索し、 my で具体的に定義したものを検索しないため、コードは意図したことを実行しPage
ませDataContext
んDataTemplate
。
編集(コメントに基づく):
33 行目と 59 行目は、DataTemplates の 2 つの ImageBrushes です。上記のコードを両方で更新しました。どちらの ConverterParameter 値も int を返します。次のコードには、コンバーター クラスが含まれています。
public class AvatarIdToUrlConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
BitmapImage s;
if (value == null || parameter == null)
s = new BitmapImage(new Uri("https://something.com/assets/dd4dbc0016779df1378e7812eabaa04d.png"));
else
s = new BitmapImage(new Uri(String.Format("https://something.com/avatars/" + parameter.ToString() + "/" + value.ToString() + ".png?size=128")));
return s;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}
public class IconIdToUrlConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, string language)
{
BitmapImage s;
if (value == null || parameter == null)
s = new BitmapImage(new Uri("https://something.com/assets/dd4dbc0016779df1378e7812eabaa04d.png"));
else
s = new BitmapImage(new Uri(String.Format("https://something.com/icons/" + parameter.ToString() + "/" + value.ToString() + ".png?size=128")));
return s;
}
public object ConvertBack(object value, Type targetType, object parameter, string language)
{
throw new NotImplementedException();
}
}