我想將一個RadioButton與視圖模型中的一個屬性系結,但它現在似乎是與ItemSource系結。我仍然需要ItemsSource來獲取我的DataGrid視圖專案,所以我如何才能解決這個問題呢?
< DataGrid DataContext="{Binding ViewModels[0]}" ItemsSource="{Binding LimitItems}">
<DataGrid.Columns>
< DataGridTemplateColumn Width="55" Header="Select">/span>
<DataGridTemplateColumn.CellTemplate>/span>
<DataTemplate>/span>
<!--radiobutton binding from datacontext-->
< RadioButton Checked="{binding SetLimitCommand}" GroupName="Setting" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn
Width="120"。
Binding="{Binding MeasItem}"
Header="MeasureItem"/span> />
</DataGrid.Columns>
</DataGrid>/span>
uj5u.com熱心網友回復:
首先,Checked是一個事件。你可以為它添加一個在后臺代碼中定義的事件處理程式,但你不能系結它,它將在運行時拋出一個例外。
InvalidCastException。無法將
System.Reflection.RuntimeEventInfo型別的物件轉換為System.Reflection.MethodInfo型別。
你可以代替系結RadioButton的Command屬性。模板列中每個單元格的資料背景關系將被設定為ItemsSource中該行的當前專案。這意味著你必須使用一個RelativeSource系結,以便參考DataGrid的DataContext。
<RadioButton Command="{Binding DataContext. SetLimitCommand, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}" GroupName="Setting" />
如果你真的需要將一個命令系結到一個事件上,你可以像這樣使用Microsoft.Xaml.Behaviors.WPF NuGet包(它是System.Windows.Interactivity的替代品)
<RadioButton GroupName="Setting">
<b:Interaction.Triggers>/span>
<b:EventTrigger EventName="Checked">/span>
<b:InvokeCommandAction Command="{Binding DataContext. SetLimitCommand, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}"/>。
</b:EventTrigger>/span>
</b:Interaction.Triggers>
</RadioButton>/span>
uj5u.com熱心網友回復:
當你系結ItemsSource屬性時,所有后續的系結都參考當前專案的屬性。所以在這種情況下,屬性SetLimitCommand被認為是你的Item-Type的一部分。 要將命令系結到ViewModel,你可以使用RelativeSource-Binding
< RadioButton Checked="{Binding RelativeSource={RelativeSource AncestorType=DataGrid}, Path=DataContext. SetLimitCommand}" GroupName="Setting" />。
無論如何,我從來沒有嘗試過將一個命令系結到一個事件......。我更喜歡系結到命令屬性,然后你也可以把當前專案作為CommandParameter來傳遞。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/312741.html
標籤:
