[英]Model method binding not working in xaml
我正在使用MVVM創建UWP應用。 在我的xaml視圖中,我有一個綁定到ObservableCollection的ListView,而Object_X是模型。 在此列表視圖內綁定到我的xaml視圖的Object_X的其他屬性正常運行。 但是,我在該列表視圖中有一個按鈕,我希望將其單擊事件綁定到我在Object_X類中定義的方法,但是在編譯代碼時,我得到的是“對象引用未設置為對象錯誤”。
這是我的xaml代碼。 ObjectXCollection是我的視圖模型中的一個屬性。 IsSelected和Value是Object_X的屬性,並且該綁定運行良好。 ExpandButtonHandler也被定義為Object_X類中的方法,但它給了我錯誤。 如果刪除該click屬性,我的代碼將構建並運行良好。 我的模型正在實現INotifyPropertyChanged,這就是屬性綁定正常工作的原因。 有人可以提出解決方案,還是可以看到問題?
<ListView ItemsSource="{Binding ObjectXCollection, Mode=TwoWay}">
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding IsSelected, Mode=TwoWay}" IsThreeState="True">
<TextBlock Text="{Binding Value}"/>
</CheckBox>
<Button Content=">>>" Click="{Binding ExpandButtonHandler}"></Button>
</StackPanel>
</DataTemplate>
</ListView>
您不能綁定到方法,也不能將綁定分配給EventHandler。 默認情況下,您只能將DependencyProperties設置為Binding對象。
通常,如果我想基於UI事件觸發一些ViewModel代碼,我將使用AttachedCommandBehavior ,它允許您在UI事件處理程序中使用綁定。
最終結果如下所示:
<Button x:Name="ExpandButton" Content=">>>"
local:CommandBehavior.Event="Click"
local:CommandBehavior.Action="{Binding ExpandButtonHandler}" />
另一種解決方案是僅在模型后面使用代碼,然后在DataContext上手動調用該方法。 不太理想,但這是一個選擇。
private void ExpandButton_OnClick(object sender, EventArgs e)
{
var vm = ExpandButton.DataContext as SomeViewModel;
vm.ExpandButtonHandler();
}
經典Binding
不允許直接綁定到方法,但是新的已編譯綁定x:Bind
允許。 您可以在此處閱讀有關編譯數據綁定的更多信息 。
<Button Click="{x:Bind ExpandButtonHandler}" Content=">>>" />
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.