質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

Q&A

1回答

459閲覧

listviewでデータの表示方法を変更する

Cauo_Gruosw

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

XAML

XAML(Extensible Application Markup Language)はWPF、Silverlight、Windows PhoneそしてWindows Store appsでユーザーインターフェースを定義するために使われるXML言語です。

0グッド

0クリップ

投稿2022/09/28 03:12

前提

XAML listview内で条件分岐をした表示を行いたいです。

実現したいこと

バインディングするデータは数値で、
コンボボックスで単位(m、cm、mm)を設定する。
有効桁数が変わらないように小数点をつけ、最後に単位を文字列に加えたいです。

例 元データ:12345.6(mm)
コンボボックスでm選択時の表示 :12.3456m
コンボボックスでcm選択時の表示:1234.56cm
コンボボックスでcm選択時の表示:12345.6mm

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

Xaml

1ソースコード

<Listview.view>
<Gridview>
<GridviewColumn Header="Dataa"
DisplaymemberBuinding="{Buinding Path=DataA , StringFormat={}{} ,
NoTargetUpdate=Tlue}"
<GridviewColumn Header="Datab"
DisplaymemberBuinding="{Buinding Path=DataB, StringFormat={}{} ,
NoTargetUpdate=Tlue}"
<GridviewColumn Header="Datac"
DisplaymemberBuinding="{Buinding Path=DataC, StringFormat={}{} ,
NoTargetUpdate=Tlue}"
</Gridview>
</Listview.view>

試したこと

トリガー?で条件分岐をするか
マルチバインディングでデータとコンボボックスを引数としてコンバーターを作りたいと思ったのですがListviewの場合どのように記述するのかわかりません

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BeatStar

2022/09/28 04:34 編集

XAMLってあるのでWPFですかね? 確かC# + XAMLって UWPとかもあるので… それと、コードはMarkdownを使ってやってください。 ヒント: https://teratail.com/help/question-tips#questionTips37 質問は編集できるので編集してください。お願いします。
draq

2022/09/28 04:36

WPF、UWP、はたまたXamarin.Formsのどれなんでしょうか。 またタグの閉じ忘れとか、Building とか Tlue とか誤字も目立ちます。 VisualStudio使わずにエディタで直接記述してるんでしょうか。記法に自信がないらなサポートがあるVisualStudio使うべきです。
dodox86

2022/09/28 05:36

まずコンボボックスでの選択肢に依存しないで、データバインディングしたちゃんと動くListViewのコードを示しましょう。そこからだと思います。
guest

回答1

0

とりあえず、IMultiValueConverterを実装したコンバータを作成し、単位と値を渡して変換すればいいんじゃないでしょうか。

WPF(.NET6) で確認したコードをあげておきます。

C#

1internal class ValueConverter : IMultiValueConverter { 2 public object Convert( object[] values, Type targetType, object parameter, CultureInfo culture ) { 3 if( values.Length == 2 && values[0] is decimal val ) { 4 if( values[1] is string unit ) { 5 if( unit == "cm" ) { 6 return $"{val / 10} cm"; 7 } 8 else if( unit == "m" ) { 9 return $"{val / 1000} m"; 10 } 11 } 12 return $"{val} mm"; 13 } 14 15 return DependencyProperty.UnsetValue; 16 17 } 18 public object[] ConvertBack( object value, Type[] targetTypes, object parameter, CultureInfo culture ) 19 => throw new NotImplementedException(); 20}

xaml

1<Window (省略)> 2 <Window.Resources> 3 <local:ValueConverter x:Key="cnv" /> 4 </Window.Resources> 5 6 <StackPanel Orientation="Vertical"> 7 <ComboBox ItemsSource="{Binding Units}" Name="cmb" SelectedValue="m" /> 8 9 <ListView ItemsSource="{Binding Values}"> 10 <ListView.View> 11 <GridView> 12 <GridViewColumn Header="Dataa"> 13 <GridViewColumn.DisplayMemberBinding> 14 <MultiBinding Converter="{StaticResource cnv}"> 15 <Binding /> 16 <Binding ElementName="cmb" Path="SelectedValue" /> 17 </MultiBinding> 18 </GridViewColumn.DisplayMemberBinding> 19 </GridViewColumn> 20 </GridView> 21 </ListView.View> 22 </ListView> 23 </StackPanel> 24</Window>

投稿2022/09/28 05:39

編集2022/09/28 09:18
draq

総合スコア2573

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TN8001

2022/09/28 08:37

12345.6 が 12.345600000000001 m になってしまいます。 0.03 が 2.9999999999999997E-05 m になるのもいやらしいですね^^;
draq

2022/09/28 09:16

あ、double型なので誤差でちゃいますね。decimalに変えておきます。
TN8001

2022/09/28 11:33

decimal限定も辛そうですが、これはこれで雑すぎますかね?w var d = decimal.Parse(values[0].ToString()!, NumberStyles.Float); return values[1] switch { "mm" => $"{d} mm", "cm" => $"{d / 10} cm", "m" => $"{d / 1000} m", _ => DependencyProperty.UnsetValue, };
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問