0

AvaloniaUI を使用して、ラベル (TextBlocks) のリストを作成しています。基になるデータの状態に応じて、一部を太字にしたいと思います。DataTemplate の TextBlock を太字にする方法、またはバインディング値に従っていない方法を教えてもらえますか?

アイテムのコード:

    public FontWeight DisplayWeight() => !IsBold ? FontWeight.Black : FontWeight.Bold;

テンプレート コード:

    <DataTemplate>
      <TextBlock Margin="4" TextWrapping="Wrap" FontWeight="{Binding DisplayWeight}" Text="{Binding Description}"/>
    </DataTemplate>

ハードコードされた重みを入れるとうまくいきます。

だから私はスタイルを試しました:

    public string DisplayClass() => IsBold ? "h1" : "p";

    <TextBlock Margin="4" TextWrapping="Wrap" Classes="{Binding DisplayClass}" Text="{Binding Description}"/>

起動時にエラーが発生します: Unable to cast object of type 'Avalonia.Data.Binding' to type 'System.String' その時点でバインディングを処理していないと思います。

正しい道は何ですか?

4

1 に答える 1

0

さて、次の XAML 行:

 <TextBlock Margin="4" TextWrapping="Wrap" FontWeight="{Binding DisplayWeight}" Text="{Binding Description}"/>

表示したいオブジェクトに次の行が適用されたときに機能しました:

    private FontWeight _displayWeight = FontWeight.Normal;
    private bool _isBold;

    public FontWeight DisplayWeight
    {
        get { return _displayWeight; }
        set { this.RaiseAndSetIfChanged(ref this._displayWeight, value); }
    }

    public bool IsBold
    {
        get => _isBold;
        set
        {
            _isBold = value;
            DisplayWeight = _isBold ? FontWeight.Bold : FontWeight.Normal;
        }
    }
于 2020-01-22T16:08:12.633 に答える