1

わかりました、私は基本的にListView、特定のスタイルで提示する必要があるコレクションをロードする 2 つの を持っています。そのために、以下に示す a を使用しますDataTemplate

両方DataTemplateで、画像とテキストをロードする必要があります。テキストは問題なく機能しますがURL、画像の を返すには、 を取得してから を取得し、user idそれらimage hashをマージして を返す必要がありURLます。

だから私がしたことは、 にバインドし、にedされた値user idを持つコンバーターを使用することです。アイデアは、これら 2 つの値を取得し、コンバーターが final を返すというものです。と はどちらも( )です。ConverterParameterx:Bindimage hashstringvalueparameterstringsURI

コンパイル中に(実行時ではなく)errors、どこでも答えを見つけることができ、それらが何を意味するのかわかりません。イベント値は、行の境界を越えて分割することはできません...

私が得るコンパイルエラー!

そのままのDataTemplates:

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ませDataContextDataTemplate

編集(コメントに基づく):

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();
    }
}
4

0 に答える 0