我是WPF中MVVM的新手,但我目前的專案是這樣的。我有一個TabControl,在一個TabItem中,我有一個DataGrid,我在那里得到的資料是這樣的:
new Zwerg { Name = "Gimli"/span>, Alter = 140, Stamm="Elbknechte", Magwert = "12 & 15", Waffe = _Zwerg. Waffe, Machtfaktor = 27, Steuern = 27 * 2.125 },
new Zwerg { Name = "Zwingli", Alter = 70, Stamm = "Elbknechte", Magwert = "45 & 15", Waffe = "Zauberstab &; Streithammer", Machtfaktor = 60, Steuern = 60 * 2. 125 }。
new Zwerg { Name = "Gumli", Alter = 163, Stamm = "Altobarden" , Magwert = "17", Waffe = "Axt", Machtfaktor = 17, Steuern = 17 * 2. 125 }
我有另一個TabItem,我有3個RadioButton和一個TextBox。這3個RadioButtons是為我的DataGrid中的3個名字準備的。當其中一個RadioButton被選中時,我的TextBox的文本應該是我的DataGrid中的Waffe單元格的新值,這樣,Waffe的當前值就隨著TextBox.Text改變為相應的名字。
變成這樣:
到此:
<因此,這取決于哪個名字被選中,只有被選中的名字的 "武器 "部分應該隨著我的TextBox的值被自動改變。
我第一次用MVVM嘗試了這個。
這是我的視圖模型。
這是我的視圖模型代碼:
public class ViewModel : INotifyPropertyChanged
{
private ICollectionView _zwerge;
Zwerg _Zwerg = new Zwerg()。
public ViewModel()
{
Zwerge = CollectionViewSource.GetDefaultView(GetData())。
}
public ICollectionView Zwerge
{
get => _zwerge;
set
{
_zwerge = value;
NotifyPropertyChanged(nameof(Zwerge))。
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void UpdatePersons()=> _zwerge?
public IList<Zwerg> GetData()
{
return new List<Zwerg>
{
new Zwerg { Name = "Gimli", Alter = 140, Stamm="Elbknechte", Magwert = "12 & 15", Waffe = _Zwerg. Waffe, Machtfaktor = 27, Steuern = 27 * 2.125 },
new Zwerg { Name = "Zwingli", Alter = 70, Stamm = "Elbknechte", Magwert = "45 & 15", Waffe = "Zauberstab &; Streithammer", Machtfaktor = 60, Steuern = 60 * 2. 125 }。
new Zwerg { Name = "Gumli", Alter = 163, Stamm = "Altobarden" , Magwert = "17", Waffe = "Axt", Machtfaktor = 17, Steuern = 17 * 2. 125 }
};
}
private void NotifyPropertyChanged([CallerMemberName] string propertyName = ")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName))。
}
}
從我的Zwerg類中我得到的資料是這樣的:
string _Waffe;
public string Waffe
{
get => _Waffe;
set { _Waffe = value; }
}
我試著用以下方法來實作:
我試著用以下方法來實作。
private void Gumlie_Click(object sender, RoutedEventArgs e)。
{
Zwerg _zwerg = new Zwerg()。
_zwerg.Waffe = addZwerg.Text。
但這并不奏效。這就是我如何在XAML中系結DataGrid資料的方法:
ItemsSource="{Binding Zwerge}"
uj5u.com熱心網友回復:
首先,你的Zwerg型別需要實作INotifyPropertyChanged,以便對用戶界面中的Waffe屬性的任何改變發出信號,否則DataGrid中的系結將不會更新。
public class Zwerg : INotifyPropertyChanged
{
string _Waffe;
public string Waffe
{
get => _Waffe;
set
{
if (_Waffe == value)
return;
_Waffe = value;
OnPropertyChanged();
}
}
//...其它屬性和代碼。
public event PropertyChangedEventHandler PropertyChanged。
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(pertyName))。
}
你面臨的問題很可能是你使用了不同的實體,因為你為類中的Zwerg欄位和 初始化器中的下面一行只將Gumli_Click處理器創建了新的Zwerg實體。點擊處理程式實際上沒有做任何事情,它創建了一個local變數Zwerg并分配其Waffe屬性。它只存在于點擊處理程式的范圍內,之后它就消失了,沒有任何作用。
_Zwerg.Waffe的當前實體(string)分配給串列中的Zwerg實體。_Zwerg.Waffe的后續變化不會被自動應用到串列中的Zwerg實體。它們沒有以任何方式被參考或鏈接。
Waffe = _Zwerg.Waffe
相反,共享List<Zwerg>或當前的Zwerg 從串列中并分配其Waffe屬性。由于不清楚你的視圖是如何結構的,你是如何系結屬性的,你在哪里分配你的視圖模型,我不能提供一個合適的例子,但它應該是明顯的,為什么它不作業,以及如何繼續。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/329110.html
標籤:
上一篇:WPFDatatriggerColorAnimation不作業
下一篇:在Angular中渲染物件的物件



