簡體   English   中英

模型方法綁定在XAML中不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM