Windows Presentation Frameworkについて語るスレ。
前スレ
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part20
http://echo.2ch.net/test/read.cgi/tech/1458082648/
関連スレ
Windows 10 UWPアプリ開発
http://echo.2ch.net/test/read.cgi/tech/1440150886/
コードを貼る場合は以下のサイトの利用をお勧め。
run codeのチェックは外しておきましょう。
http://ideone.com/
探検
WPF(XAML, XBAP, .NET4.0)GUIプログラミング Part21 [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2017/05/09(火) 09:09:13.94ID:KhhA22kJ
2017/05/11(木) 06:09:39.89ID:urIvfzei
Prism触ったけどなんか俺にはmoduleとかresionとかなんか取っつきにくいわ
まだlivetの方が扱いやすい
しかしlivetは更新きそうもねぇ…
まだlivetの方が扱いやすい
しかしlivetは更新きそうもねぇ…
2017/05/11(木) 06:38:28.68ID:jDR4zwYO
おー
わんだふる
こーでぃ
んぐ
わんだふる
こーでぃ
んぐ
2017/05/11(木) 09:30:03.19ID:3FEzfd+k
>>2
俺は一人でやっているからmoduleはほとんどつかわないな
resionは画面遷移させたりするからよく使うね
livetはオワコンってどっかで見たような気がする
MVVMパターンでコーディングしていくなら
prism一択だともう、UWP向けもあるし
俺は一人でやっているからmoduleはほとんどつかわないな
resionは画面遷移させたりするからよく使うね
livetはオワコンってどっかで見たような気がする
MVVMパターンでコーディングしていくなら
prism一択だともう、UWP向けもあるし
5デフォルトの名無しさん
2017/05/11(木) 16:58:28.11ID:yv1eK+cF WPFは定着したのか?
2017/05/11(木) 19:47:14.62ID:7SeHLwtP
煽るなよクズ
2017/05/11(木) 20:29:11.34ID:ZJ7VD95O
WPFとUWPはコントロールを統一してほしいわ
2017/05/11(木) 21:03:57.37ID:Iyov9hyd
WPFにもx:bindくださいよ・・・
2017/05/11(木) 21:41:57.64ID:qZUu09r+
WPFは実験台だったんだよ!!
2017/05/11(木) 22:14:42.24ID:H/VVixUH
>>6
質問しただけなのに煽り扱いとか草
質問しただけなのに煽り扱いとか草
2017/05/12(金) 09:03:05.08ID:aVMf/EH4
>>9
silverlight「せやな」
silverlight「せやな」
2017/05/12(金) 09:49:53.60ID:/FU2Mr/k
>>9
WinForms「そんなバカな!?」
WinForms「そんなバカな!?」
2017/05/12(金) 10:41:27.09ID:178y8u3h
XAML Standard 1.0かあ
> Post specification plans include support of XAML standard in Xamarin Forms and UWP
フフッ
> Post specification plans include support of XAML standard in Xamarin Forms and UWP
フフッ
2017/05/12(金) 11:10:06.94ID:aVMf/EH4
WPFにx:bindがくるの?
2017/05/12(金) 11:47:01.51ID:178y8u3h
2017/05/12(金) 12:06:16.95ID:jSPcfUbH
XAML StandardはUWP基準でやったほうが楽っぽいけど、どうなるんだろ?
2017/05/12(金) 20:22:06.68ID:3U2TPXlN
DataGridViewとDataGridとGridView・・・名前だけでも収拾つかなくなってるな
2017/05/13(土) 12:03:16.66ID:+XOpMNlS
VS2015upd3のデザイナー上で突然、下記のエラーが起きたんだけどなぜこうなったか分かりますか?
{
"Version": "W.3.2.2.0",
"Guid": "6fe59b26-7383-40d5-947c-7448769a5e81",
"Type": "System.Runtime.InteropServices.COMException",
"Time": "2017/05/13 11:39:38",
"Position": "PresentationCore--->Void SyncFlush()",
"Message": "HRESULT からの例外:0x88980406",
"StackTrace": " 場所 System.Windows.Media.Composition.DUCE.Channel.SyncFlush()\r\n
〜〜〜〜〜〜
System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)"
}
{
"Version": "W.3.2.2.0",
"Guid": "6fe59b26-7383-40d5-947c-7448769a5e81",
"Type": "System.Runtime.InteropServices.COMException",
"Time": "2017/05/13 11:39:38",
"Position": "PresentationCore--->Void SyncFlush()",
"Message": "HRESULT からの例外:0x88980406",
"StackTrace": " 場所 System.Windows.Media.Composition.DUCE.Channel.SyncFlush()\r\n
〜〜〜〜〜〜
System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)"
}
1918
2017/05/13(土) 13:38:34.53ID:+XOpMNlS 自己解決です。
どうやら拡張機能である[BabeLua]をインストールしてたのが原因でした。
どうやら拡張機能である[BabeLua]をインストールしてたのが原因でした。
2017/05/15(月) 18:08:45.66ID:Ctz1XYd1
DataGridのRowDetailにDataGridをネストして、更にそのDataGridのRowDetailにDataGridをネストして...
という感じで多階層にデータを取り扱えないかチャレンジしているのですが、
この時、動的に生成された全てのDataGridの中から最後に選択された1つのアイテムを取得する方法ってありますでしょうか?
SelectedItemプロパティを全て同じVMのプロパティにBindしてみたのですが、思うように動いてくれず・・・。
という感じで多階層にデータを取り扱えないかチャレンジしているのですが、
この時、動的に生成された全てのDataGridの中から最後に選択された1つのアイテムを取得する方法ってありますでしょうか?
SelectedItemプロパティを全て同じVMのプロパティにBindしてみたのですが、思うように動いてくれず・・・。
2017/05/15(月) 23:36:54.04ID:NF1B/L7+
せめてサンプルは出そうよ
2017/05/15(月) 23:45:12.16ID:H6WdDjEY
高度に発達した天才はキチガイと区別がつかない
2017/05/16(火) 09:10:31.52ID:yWt8l9TR
失念しておりました!下記の通りです。
※View.xaml
<DataTemplate x:Key="Expander">
<ToggleButton IsChecked="{Binding RelativeSource={RelativeSource AncestorType=DataGridRow},
Converter={StaticResource VisbilityToBoolean},Path=DetailsVisibility}">
</ToggleButton>
</DataTemplate>
<DataTemplate x:Key="ChildDataGrid">
<DataGrid ItemsSource="{Binding Children}"
SelectedItem="{Binding SelectedRowItem}"
RowDetailsTemplate="{DynamicResource Child}">
<DataGrid.Columns>
<DataGridTemplateColumn CellTemplate="{StaticResource Expander}" />
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
<DataGrid ItemsSource="{Binding Items}"
SelectedItem="{Binding SelectedRowItem}"
RowDetailsTemplate="{DynamicResource ChildDataGrid}">
<DataGrid.Columns>
<DataGridTemplateColumn CellTemplate="{StaticResource Expander}" />
</DataGrid.Columns>
</DataGrid>
※VM.cs
public object SelectedRowItem{get;set;}
public ObservableCollection<Item> Items{get;set;}
※Model.cs
public class Item{
public int ItemId{get;set;}
public string ItemName{get;set;}
public List<Item> Children{get;set;}}
※View.xaml
<DataTemplate x:Key="Expander">
<ToggleButton IsChecked="{Binding RelativeSource={RelativeSource AncestorType=DataGridRow},
Converter={StaticResource VisbilityToBoolean},Path=DetailsVisibility}">
</ToggleButton>
</DataTemplate>
<DataTemplate x:Key="ChildDataGrid">
<DataGrid ItemsSource="{Binding Children}"
SelectedItem="{Binding SelectedRowItem}"
RowDetailsTemplate="{DynamicResource Child}">
<DataGrid.Columns>
<DataGridTemplateColumn CellTemplate="{StaticResource Expander}" />
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
<DataGrid ItemsSource="{Binding Items}"
SelectedItem="{Binding SelectedRowItem}"
RowDetailsTemplate="{DynamicResource ChildDataGrid}">
<DataGrid.Columns>
<DataGridTemplateColumn CellTemplate="{StaticResource Expander}" />
</DataGrid.Columns>
</DataGrid>
※VM.cs
public object SelectedRowItem{get;set;}
public ObservableCollection<Item> Items{get;set;}
※Model.cs
public class Item{
public int ItemId{get;set;}
public string ItemName{get;set;}
public List<Item> Children{get;set;}}
2017/05/16(火) 09:11:34.75ID:yWt8l9TR
DataGrid(A)のItem1を選択→展開されたDataGrid(A)のRowDetail内のDataGrid(B)のItem2を選択(ここまでは理想通りにSelectedItemが拾える)
→DataGrid(A)のItem1を再度選択(この時にSelectedItemがnullでセッターに飛んでくる)
といった感じで最終的に選択されたアイテムはItem1である、となって欲しいのですが、うまく行きません。。。
→DataGrid(A)のItem1を再度選択(この時にSelectedItemがnullでセッターに飛んでくる)
といった感じで最終的に選択されたアイテムはItem1である、となって欲しいのですが、うまく行きません。。。
2017/05/20(土) 02:33:43.45ID:l5Fo+DHG
Xamarin.Forms Feature Roadmap ? Xamarin Forums
https://forums.xamarin.com/discussion/85747/xamarin-forms-feature-roadmap/
Xamarin.Forms for WPF
https://forums.xamarin.com/discussion/85747/xamarin-forms-feature-roadmap/
Xamarin.Forms for WPF
2017/05/20(土) 02:39:33.97ID:uA2nqlms
DataGridが大量データに弱すぎて使い物にならない。
せめてExcel並みのパフォーマンスくらい難なく出させてくれよって感じ。
いろいろ調べたけど、結局満足の行く情報も得られず。英語読めないし、日本語文献少なすぎ。
線と文字と縦横のスクロールバーを使って自前の描画をさせることも試したけど、
1ピクセルの細い線が満足に引けないって何なんだか。
見える範囲だけ線と文字を並べるのも速く無かったし。
で、WPFをメインに据えるのは諦めた。
WebBrowserでHTMLやJavaScript使う方がマシだなって思ったら、WPFのWebBrowserが
Windows FormsのWebBrowserより低機能とか、全くどうなってんだか。
WPF何とかならんのかね。。。。。。。。。。
せめてExcel並みのパフォーマンスくらい難なく出させてくれよって感じ。
いろいろ調べたけど、結局満足の行く情報も得られず。英語読めないし、日本語文献少なすぎ。
線と文字と縦横のスクロールバーを使って自前の描画をさせることも試したけど、
1ピクセルの細い線が満足に引けないって何なんだか。
見える範囲だけ線と文字を並べるのも速く無かったし。
で、WPFをメインに据えるのは諦めた。
WebBrowserでHTMLやJavaScript使う方がマシだなって思ったら、WPFのWebBrowserが
Windows FormsのWebBrowserより低機能とか、全くどうなってんだか。
WPF何とかならんのかね。。。。。。。。。。
2017/05/20(土) 03:37:37.19ID:KHEwJCpd
なんかすぐにパフォーマンス的な制約にぶつかるよねWPFって
何で最初からせめてWindows Formは機能的に完全に置き換え可能なように気合いれて作らなかったのか
何で最初からせめてWindows Formは機能的に完全に置き換え可能なように気合いれて作らなかったのか
2017/05/20(土) 13:11:07.24ID:t3SNHOM+
できるわけないだろ、常識的に考えて・・・
最近はアセンブラ経験ない奴増えてパフォーマンスに対する認識が低すぎる・・・
どういう処理が重くてどういう処理が軽いが全く認識せずコード書いてる・・・
最近はアセンブラ経験ない奴増えてパフォーマンスに対する認識が低すぎる・・・
どういう処理が重くてどういう処理が軽いが全く認識せずコード書いてる・・・
2017/05/20(土) 13:13:56.09ID:5vuXYzJT
この2017年にもなってまだアセンブラ意識してコード書かなきゃならんのかよ
2017/05/20(土) 13:25:13.56ID:t3SNHOM+
むしろアセンブラの知識がいらないという発想が全く理解できない。
たぶんキミはPGに向いてない。
たぶんキミはPGに向いてない。
2017/05/20(土) 13:30:30.22ID:Wox1Gkc9
必死すぎワロタ
2017/05/20(土) 14:00:19.52ID:U9rYpiRi
アセンブラまで行かなくても、ライブラリー類を一切使わず処理を全部基本の文法だけで書いて
パフォーマンスを自分で考える位のことは、プログラミングの勉強の一環として必要かもね。
利便性とパフォーマンスのバランス感覚を身に付けると言うか。
パフォーマンスを自分で考える位のことは、プログラミングの勉強の一環として必要かもね。
利便性とパフォーマンスのバランス感覚を身に付けると言うか。
2017/05/20(土) 14:07:25.80ID:l5Fo+DHG
DataGridはWinFormsでもうんこだから。
2017/05/20(土) 16:00:16.10ID:rnnQH6fx
だよねー
いつ良かったんだろ?
いつ良かったんだろ?
2017/05/20(土) 18:21:04.77ID:jVqpThIf
DataGridは入力系だから、最大でも数十行マトモに動けば問題ないと思うんだよな
数百数千行表示したければListBox使えばいいよ
Formsと違って、WpfやUwpはListBoxの表現力は高い
数百数千行表示したければListBox使えばいいよ
Formsと違って、WpfやUwpはListBoxの表現力は高い
2017/05/20(土) 18:58:05.92ID:A83HeXSo
WPF初期リリースにDataGridが含まれてなかったのは、
Templateいじれば同等の事できるはずだから不要ってことだったのかね?
Templateいじれば同等の事できるはずだから不要ってことだったのかね?
2017/05/20(土) 22:59:37.33ID:DQmNnW2r
RenderTargetBitmap からメタファイルを生成するサンプルって
どこかにありますか?
どこかにありますか?
2017/05/20(土) 23:44:17.23ID:9h1Xx+SW
WPFスレでアセンブラどうこう言ってる化石は土に埋まってろよ
2017/05/20(土) 23:46:30.50ID:PmwbqNDX
百歩ゆずってCPUの動作、また百歩ゆずって機械語を意識しろなら
わからんでもないけどアセンブラはないねw
しかも正式にはアセンブラじゃなくてアセンブリ言語だしw
わからんでもないけどアセンブラはないねw
しかも正式にはアセンブラじゃなくてアセンブリ言語だしw
2017/05/21(日) 00:46:34.95ID:8zMWeNzv
き〜か〜い〜の〜き〜も〜ち〜
2017/05/21(日) 02:00:38.41ID:k47BBUnj
2017/05/21(日) 03:50:00.04ID:xPrtSSgz
おじいちゃんほんと申し訳ないんだけど一生懸命覚えたであろうアセンブラの知識や機械語の知識
現代では君が信じてるほど出番無いんだわ
現代では君が信じてるほど出番無いんだわ
2017/05/21(日) 05:46:56.15ID:pa0r6x2E
大昔は、乗除算や分岐が重い処理だから少なくするんだっけ
ちょっと昔は、コンテキストスイッチに気を付けるくらい?
今は何に気を付ければいいん?
マネージ・アンマネージの行き来?
ちょっと昔は、コンテキストスイッチに気を付けるくらい?
今は何に気を付ければいいん?
マネージ・アンマネージの行き来?
2017/05/21(日) 07:59:15.03ID:5ysSED91
キャリーフラグの値が欲しいときがある。
2017/05/21(日) 08:09:37.53ID:B8Y3PA0X
まあ、頑張ってチマチマ最適化しようが、DataGridに数万行突っ込んだら全て終了です
2017/05/21(日) 08:40:00.41ID:6fwslcYw
仮想化しても駄目なの?
2017/05/21(日) 14:43:55.71ID:jNq5R9xb
2017/05/21(日) 15:07:35.59ID:xCFEt9+J
数万って実際どのくらいかな
2017/05/21(日) 15:26:06.30ID:1Ubd4ETn
2017/05/22(月) 09:03:17.61ID:6FuooAR5
そもそもDataGridに何万件もデータを入れようなんて設計が間違っているんじゃない?
それにWPFなら仮想化できるし、そこまで問題にならないような・・・
それにWPFなら仮想化できるし、そこまで問題にならないような・・・
2017/05/22(月) 09:10:48.84ID:f1FFPJ6b
52デフォルトの名無しさん
2017/05/22(月) 10:06:44.67ID:ZytydYHf 暑いけどまだ夏休みじゃないのにな
2017/05/22(月) 11:41:08.65ID:eJszv2Pe
毎日が日曜日なんだろ
54デフォルトの名無しさん
2017/05/22(月) 20:05:09.72ID:EJo9O8hZ いまさらListViewがデフォ仮想化されててIsSelectedとBindしても同期されないって知ったのですが
仮想してる場合SelectionChangedから自力でやるしかないのですか?
仮想してる場合SelectionChangedから自力でやるしかないのですか?
2017/05/22(月) 20:11:22.91ID:f1FFPJ6b
ItermsControlの仮想化は欠陥品もいいとこだから切ってるわ
あとはパフォーマンスに端から期待しない設計をすればいい
あとはパフォーマンスに端から期待しない設計をすればいい
2017/05/22(月) 20:56:51.57ID:zMhg6UhV
2017/05/22(月) 21:24:33.03ID:qkUesmwG
>あとはパフォーマンスに端から期待しない設計をすればいい
パフォーマンスがWin Formsと同等、あとはコントロールなどWin Formsと同等のものが
早いタイミングで用意されてたら、WPFの現状も今とは多少違うものになっていたろうにな
パフォーマンスがWin Formsと同等、あとはコントロールなどWin Formsと同等のものが
早いタイミングで用意されてたら、WPFの現状も今とは多少違うものになっていたろうにな
2017/05/22(月) 21:55:52.23ID:xSrNGN1H
WPFも.NET Nativeにすれば良かったんだよ。
今からもすれ。
今からもすれ。
59デフォルトの名無しさん
2017/05/22(月) 22:34:48.41ID:MGdDMh7q2017/05/22(月) 22:40:32.33ID:4tsp+V1N
50に設計を依頼したくないな
2017/05/22(月) 22:43:05.83ID:5GrenZQq
>>59
WInFormsはListBoxやListViewがお粗末だから、見栄えの良い表にしようとするならDataGridViewを使わざるを得ないが
wpfなら大量データの表示はListViewやListBoxを使えばいい
DataGridは入力する場合だけに使えばいいから、言うほど大量のデータを扱う必要はない
WInFormsはListBoxやListViewがお粗末だから、見栄えの良い表にしようとするならDataGridViewを使わざるを得ないが
wpfなら大量データの表示はListViewやListBoxを使えばいい
DataGridは入力する場合だけに使えばいいから、言うほど大量のデータを扱う必要はない
62デフォルトの名無しさん
2017/05/23(火) 01:38:23.07ID:04UVyDFy Excelが何万件ものデータを扱うとき全部オンメモリで
やってるとでも?
その程度の思考でプログラマーやってることにドン引きだわ。
しっかし、相変わらず文句ばかりのスレだね。
そのエネルギーをもっと有効活用すればいいのに。
別にWPF使えとか強要してるわけでもなし、こんな
過疎スレにわざわざからみに来るなんて余程暇なんだな。
やってるとでも?
その程度の思考でプログラマーやってることにドン引きだわ。
しっかし、相変わらず文句ばかりのスレだね。
そのエネルギーをもっと有効活用すればいいのに。
別にWPF使えとか強要してるわけでもなし、こんな
過疎スレにわざわざからみに来るなんて余程暇なんだな。
2017/05/23(火) 01:53:54.82ID:WH5r8h3p
適材適所が理解出来ないお爺ちゃん達には困ったもんだよ、ほんとに。
2017/05/23(火) 08:24:09.32ID:hLB5M4JB
どうでもいいけどD-RWMって何を考えてこういうことになるんだろかね。
ROMがRead Only Memoryだから
RAMはRead Writeとかトンデモ理論なの?
Aはなんだと思ってたのかね。
Random Access Memoryなのに。
ROMがRead Only Memoryだから
RAMはRead Writeとかトンデモ理論なの?
Aはなんだと思ってたのかね。
Random Access Memoryなのに。
2017/05/23(火) 09:01:09.88ID:eURNpC6R
>>64
横だが、ROMも機能的にはランダムアクセスメモリーなわけで、ROMと区別するための識別子としてRAMは意味合い的にふさわしくないが
定着しちまったから略語として正しいRWMじゃなくてRAMと言っている
この理屈はアセンブリ言語を定着しているからアセンブラと呼ぶことと同じ理屈だってことじゃないかな
「アセンブリ言語だーと喚くならRWMと呼べ」という主張には一定の正当性があります
横だが、ROMも機能的にはランダムアクセスメモリーなわけで、ROMと区別するための識別子としてRAMは意味合い的にふさわしくないが
定着しちまったから略語として正しいRWMじゃなくてRAMと言っている
この理屈はアセンブリ言語を定着しているからアセンブラと呼ぶことと同じ理屈だってことじゃないかな
「アセンブリ言語だーと喚くならRWMと呼べ」という主張には一定の正当性があります
2017/05/23(火) 10:39:20.88ID:/57g/yiT
なんか鳥頭なのかこの話の流れの突っ込みどころ、笑いどころが分かってないのが多いけど、
そもそもWPFのパフォーマンスの話の中で「アセンブラ」なんて頓珍漢な言葉が出てくるのはどうなのっていう
そこだからw
言葉遣いが不適切であるってのはついでの話
そもそもWPFのパフォーマンスの話の中で「アセンブラ」なんて頓珍漢な言葉が出てくるのはどうなのっていう
そこだからw
言葉遣いが不適切であるってのはついでの話
2017/05/23(火) 10:58:17.14ID:qgSsavId
ループ以外のレスをしないでください
2017/05/23(火) 18:41:38.32ID:bHvhS1TZ
>>64
バカは書き込まなくていいぞ w
バカは書き込まなくていいぞ w
2017/05/26(金) 00:09:01.46ID:FoMmFfzc
XAMLのBindingで質問です。
とても単純なケースで説明すると、
XAML側でTextBoxを定義して、Textに
MainWindowに新設したstring testStringをBindするとします。
public partial class MainWindow : Window
{
public string testString { get; set; }
<TextBox x:Name="testTextBox" 〜省略〜 Text="{Binding testString}"/>
この状態において、
コンストラクタ内で
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
testString = "1st set";
}
このコードを実行すると起動時にテキストボックスに"1st set"が入っており想定通りです。
さらに、新規ボタンコントロールを追加して
ボタンが押された際に新しい文字列をテキストボックスに設定するようにするとテキストボックスが更新されません。
private void testButton_Click(object sender, RoutedEventArgs e)
{
testString = "push Button";
}
とても単純なケースで説明すると、
XAML側でTextBoxを定義して、Textに
MainWindowに新設したstring testStringをBindするとします。
public partial class MainWindow : Window
{
public string testString { get; set; }
<TextBox x:Name="testTextBox" 〜省略〜 Text="{Binding testString}"/>
この状態において、
コンストラクタ内で
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
testString = "1st set";
}
このコードを実行すると起動時にテキストボックスに"1st set"が入っており想定通りです。
さらに、新規ボタンコントロールを追加して
ボタンが押された際に新しい文字列をテキストボックスに設定するようにするとテキストボックスが更新されません。
private void testButton_Click(object sender, RoutedEventArgs e)
{
testString = "push Button";
}
2017/05/26(金) 00:16:30.67ID:CtcOIoTT
>>69
INotifyPropertyChanged
INotifyPropertyChanged
7169
2017/05/26(金) 00:22:39.18ID:FoMmFfzc しかし、この状態で
private void testButton_Click(object sender, RoutedEventArgs e)
{
testString = "push Button";
// 以下を追加
Binding bind = new Binding("testString");
bind.Source = this;
this.testTextBox.SetBinding(TextBox.TextProperty, bind);
}
とするとテキストボックスは更新されました。
XAML側のBinding指定はコンストラクタなど各ウインドウ?が生成される時にしか有効ではないのでしょうか?
それ以後Bindされているオブジェクトが新しくなる場合は、再度バインドしなおさなくてはならないのでしょうか?
自分の理解では、
オブジェクトが更新された場合の内部挙動はBindingで所持しているプロパティパスを
DataContextからFindして該当プロパティの値を参照する、というようなイメージだったのですが、
どうもこの挙動をみていると、該当プロパティを見つけるところまでは同じですが、
見つけた後、プロパティの中に入っているオブジェクトそのものだけを記憶しているように感じます。
C++的な書き方をするなら
class MainWindow
{
string* testString;
}
// 想定していた挙動
string*& bind_property = MainWindow.testString;
// 実際の挙動
string* bind_property = MainWindow.testString;
みたいな感じですかね。新規オブジェクトのアドレスが代入されるけど、バインドは旧オブジェクトのアドレスをみているようなイメージ。
private void testButton_Click(object sender, RoutedEventArgs e)
{
testString = "push Button";
// 以下を追加
Binding bind = new Binding("testString");
bind.Source = this;
this.testTextBox.SetBinding(TextBox.TextProperty, bind);
}
とするとテキストボックスは更新されました。
XAML側のBinding指定はコンストラクタなど各ウインドウ?が生成される時にしか有効ではないのでしょうか?
それ以後Bindされているオブジェクトが新しくなる場合は、再度バインドしなおさなくてはならないのでしょうか?
自分の理解では、
オブジェクトが更新された場合の内部挙動はBindingで所持しているプロパティパスを
DataContextからFindして該当プロパティの値を参照する、というようなイメージだったのですが、
どうもこの挙動をみていると、該当プロパティを見つけるところまでは同じですが、
見つけた後、プロパティの中に入っているオブジェクトそのものだけを記憶しているように感じます。
C++的な書き方をするなら
class MainWindow
{
string* testString;
}
// 想定していた挙動
string*& bind_property = MainWindow.testString;
// 実際の挙動
string* bind_property = MainWindow.testString;
みたいな感じですかね。新規オブジェクトのアドレスが代入されるけど、バインドは旧オブジェクトのアドレスをみているようなイメージ。
2017/05/26(金) 00:28:48.35ID:FoMmFfzc
2017/05/26(金) 02:07:15.36ID:t9Hdpjhx
>>72
> GUIコントロールからプロパティへのフィードバックが必要な場合はINotifyPropertyChanged
> を使う必要があるのかなと思っていたのですが、
> プロパティ->GUIコントロールだったとしてもINotifyPropertyChangedが必要なんでしょうか?
これは逆だね
>>69 のコードでもテキストボックスのテキストを打ち変えたら testString の値も変わる
(デフォルトではテキストボックスからフォーカスが外れたとき)
INotifyPropertyChanged を実装するのは testString の値が変更されたことをテキストボックスに通知するため。
> testStringをMainWindowではなく
> INotifyPropertyChangedを継承した別クラスにおいて
インターフェイスなので MainWindow に実装してもいい。もちろん別クラスでもいい。
> GUIコントロールからプロパティへのフィードバックが必要な場合はINotifyPropertyChanged
> を使う必要があるのかなと思っていたのですが、
> プロパティ->GUIコントロールだったとしてもINotifyPropertyChangedが必要なんでしょうか?
これは逆だね
>>69 のコードでもテキストボックスのテキストを打ち変えたら testString の値も変わる
(デフォルトではテキストボックスからフォーカスが外れたとき)
INotifyPropertyChanged を実装するのは testString の値が変更されたことをテキストボックスに通知するため。
> testStringをMainWindowではなく
> INotifyPropertyChangedを継承した別クラスにおいて
インターフェイスなので MainWindow に実装してもいい。もちろん別クラスでもいい。
7469
2017/05/26(金) 23:30:26.04ID:FoMmFfzc ありがとうございました。
INotifyPropertyChangedで解決できました。
最終的にはPrismいれてBindableを使うようにしました。
ちなみに皆さんは、どこでWPFの情報を収集して学習しましたか?
MSDNだけで十分?
自分は本などは買っておらずネットだけでなんとかしようと思っていたのですが、
WPFのバックエンドの動作などが細かく解説してあるようなページはみつけられなくて・・。
そういったイメージがつかめるととっつきやすいかなーとおもうのですが。
INotifyPropertyChangedで解決できました。
最終的にはPrismいれてBindableを使うようにしました。
ちなみに皆さんは、どこでWPFの情報を収集して学習しましたか?
MSDNだけで十分?
自分は本などは買っておらずネットだけでなんとかしようと思っていたのですが、
WPFのバックエンドの動作などが細かく解説してあるようなページはみつけられなくて・・。
そういったイメージがつかめるととっつきやすいかなーとおもうのですが。
2017/05/27(土) 00:50:54.10ID:XfIUBFbn
ReactivePropertyのほうが簡単でいいよ。
PrismとReactivePropertyの組み合わせが鉄板。
PrismとReactivePropertyの組み合わせが鉄板。
2017/05/27(土) 22:37:08.09ID:sdz07quX
2017/05/27(土) 22:43:09.07ID:Cnbgg+tR
7869
2017/05/28(日) 20:09:32.80ID:wwPe3PxY みなさん、ありがとうございます。
参考にさせて頂きます。
参考にさせて頂きます。
2017/05/29(月) 19:36:45.18ID:BsTukI6Z
HogeViewModel は名前空間 "clr-namespace:ViewModels に存在しませんとかいうエラーに小一時間悩んだあげく
(実行はできるけどXAMLデザイナーがエラー出ていじれない)
結局ViewModelが参照してるDLLのインターフェースを実装したらそうなることが分かった・・・
意味分からん
(実行はできるけどXAMLデザイナーがエラー出ていじれない)
結局ViewModelが参照してるDLLのインターフェースを実装したらそうなることが分かった・・・
意味分からん
2017/06/01(木) 02:38:41.97ID:VSEcCyJ5
そんなクラス(ロードでき)ないぞ!
というエラーなわけだな
というエラーなわけだな
2017/06/01(木) 08:18:09.78ID:JS2ZXwNm
デザイナーエラーで悩んだこと有ったが、俺の場合は古いBlendのdllがGACに入っていることが問題だったな
2017/06/01(木) 15:41:03.41ID:wFAG8npl
ねーねー
WPFってメモリリークしやすいっていうけど、リークしてるってのはどういう手法で見つけてるの?
例えば、VS2017の場合とか
WPFってメモリリークしやすいっていうけど、リークしてるってのはどういう手法で見つけてるの?
例えば、VS2017の場合とか
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国側が首相答弁の撤回要求、日本側拒否★4 [夜のけいちゃん★]
- 中国側が首相答弁の撤回要求、日本側拒否★3 [夜のけいちゃん★]
- 被爆者は「怒りが腹の底から湧いてくる」高市首相“非核三原則見直し報道”に被爆地で懸念や憤りの声《長崎》 [1ゲットロボ★]
- 債券・円・株「トリプル安」に…長期金利1.755%まで上昇、円は対ユーロで史上最安値 ★2 [蚤の市★]
- 中国の局長は「両手をポケット」で対峙 宣伝戦で国民に示す ★4 [蚤の市★]
- 日本行き空路49万件キャンセル 中国自粛呼びかけ 日本行きチケット予約の約32%に相当 ★6 [ぐれ★]
- ネトウヨ「中国のものは何もいらない!」 中国人「だったら漢字を使わないでください」 [314039747]
- 【速報】春節の飛行機も欠航ラッシュ 高市早苗終了か [695089791]
- 【悲報】中国から輸入した物を食べ、輸入した服を着て、輸入したスマホ弄ってる日本人「中国と戦争するぞ!」 [616817505]
- 【悲報】高市さん、消える [535650357]
- 男だけど生理きちゃった…♥
- 高市の台湾有事への答弁擁護で質問した立憲が悪いて"統一"されているのって何?逆説的にそんな答弁した高市批判だろ [472617201]
