gpt4 book ai didi

wpf - 如何让数据绑定(bind)使用简单的 MVVM 结构

转载 作者:行者123 更新时间:2023-12-03 10:54:39 24 4
gpt4 key购买 nike

在得到正确答案后,我想我应该更新它以显示工作代码供人们将来引用:

主窗口.xaml

<Grid>
<Grid.Resources>
<local:ValueConverters x:Key="ValueConverters"></local:ValueConverters>
</Grid.Resources>
<TextBox Text="{Binding Text, UpdateSourceTrigger=PropertyChanged}">
<TextBox.Style>
<Style>
<Style.Triggers>
<DataTrigger Binding="{Binding Path=Text,Converter={StaticResource ValueConverters}}" Value="True">
<Setter Property="TextBox.Foreground" Value="Red"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
</Grid>

主窗口.xaml.cs
public partial class MainWindow : MetroWindow
{
private readonly DataBindingViewModel _vm = new DataBindingViewModel();

public MainWindow()
{
InitializeComponent();
DataContext = _vm;
}
}

DataBindingViewModel.cs
public class DataBindingViewModel : INotifyPropertyChanged
{
private string _text;

public string Text
{
get
{
return this._text;
}
set
{
this._text = value;
if (null != PropertyChanged)
{
this.PropertyChanged(this, new PropertyChangedEventArgs("Text"));
}
}
}

public event PropertyChangedEventHandler PropertyChanged;
}

值(value)转换器
public class ValueConverters : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (null != value)
{
if (value.ToString() == "1")
return true;
}
return false;
}

public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
}

以上现在有效:)

最佳答案

在 MainWindow 的 XAML 中,DataContext 设置为 ValueConverters 的一个实例:

<Window.DataContext>
<local:ValueConverters/>
</Window.DataContext>

这似乎没有意义。您应该将其替换为
<Window.DataContext>
<local:DataBindingViewModel/>
</Window.DataContext>

您不必在 MainWindow 的构造函数中再次设置 DataContext,但可能仍会像这样分配私有(private)字段(供以后使用):
private readonly DataBindingViewModel _vm;

public MainWindow()
{
InitializeComponent();
_vm = (DataBindingViewModel)DataContext;
}

或者,根本不要在 XAML 中设置 DataContext,并在后面的代码中创建它,如下所示:
private readonly DataBindingViewModel _vm = new DataBindingViewModel();

public MainWindow()
{
InitializeComponent();
DataContext = _vm;
}

关于wpf - 如何让数据绑定(bind)使用简单的 MVVM 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40611494/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com