xaml檔案中代碼:
<ListView Name="LV" Grid.Column ="0" ItemsSource ="{Binding Structures}">
<ListView.ItemTemplate>
<DataTemplate>
<CheckBox Content ="{Binding Id}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<i:InvokeCommandAction Command="{Binding Structure_Onchecked}"/>
</i:EventTrigger>
<i:EventTrigger EventName="Unchecked">
<i:InvokeCommandAction Command="{Binding Structure_OnUnchecked}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</CheckBox>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
請問在viewmodel中怎么實作checked和unchecked事件
uj5u.com熱心網友回復:
既然是mvvm模式,那么界面只是資料的展示/操作層,一般來說事件只是用來在View中觸發影片不要想著xx事件做xx事情, 那是winform的思維模式,正常情況下ViewMode甚至不應該知道View的存在,更不要談如何去相應View中的事件
在mvvm模式中,資料才是中心,界面通過系結與資料連接,并展示/修改資料
這里所說的資料都是類上的屬性,而對屬性的變化進行反應,應該不存在什么疑問吧?
具體到此例,
CheckBox的IsChecked屬性應該系結到ViewModel類中的某個屬性上,ViewModel通過這個屬性的變化進行反應即可.
uj5u.com熱心網友回復:
現在我就是想在viewmodel中實作系結的command,并且能夠傳回checkbox控制元件uj5u.com熱心網友回復:
+1
如果用ICommand命令模式,每個ViewModel類都要提供兩個命令以供系結,較繁瑣也沒太大必要。
JDD1997朋友建議的屬性系結,容易且代碼更簡單。
<ListView Name="LV" Grid.Column ="0" ItemsSource ="{Binding Structures}">
<ListView.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Id}" IsChecked="{Binding Selected}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.Structures = new List<My>() { new My("1"), new My("3"), new My("5"), };
this.DataContext = this;
}
public List<My> Structures { get; private set; }
public class My
{
public My(string id) { Id = id; }
public string Id { get; set; }
bool _selected;
public bool Selected
{
get { return _selected; }
set { _selected = value; MessageBox.Show(Id + " 勾選演示:" + _selected); }
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/76307.html
標籤:C#
